标签:
题目内容:
给定一个int数组,代表一个非负数不同的位, 在这个数字中加上1之后将结果以int数组的形式返回。
个人解法1:
1.现将数组转化为int之后加上1之后再变成数组,这样就可能忽略溢出所以无法通过
个人解法2:
这个解法超级麻烦自己也做不下去了,感觉对于数组操作的部分还不是很熟悉:
1.先定义一个ArraList作为结果集(因为它不定长,不用考虑边界问题),之后对digits上面的每一位进行判断,如果加上1等于10的话digits[i]=0 and carry =1
2.将计算后的结果放入ArrayList中,之后再将ArrayList中的结果进行逆序输出赋值到结果数组里。
3.感觉空间复杂度好高。
个人解法3:
1.这又是一个暴力的解法,定长的数据好是烦人。
2.先对digits进行操作,之后再根据carry对result进行赋值
3.要注意的就是有关进位以后的边界问题。
代码:
public static int[] plusOne(int[] digits){
int len = digits.length;
int carry = 1;
for(int i= len-1; i>=0; --i){
if(digits[i]==9&&carry==1){
digits[i]=0;
carry=1;
}else{
digits[i] +=carry;
carry=0;
}
}
if (carry==0){
int[] result = new int[len];
for(int i=0; i<len;i++){
result[i]=digits[i];
}
return result;
}else{
int[] result = new int[len+1];
result[0]=carry;
for(int i=1; i<len+1;i++){
result[i]=digits[i-1];
}
return result;
}
}
感觉好low
标签:
原文地址:http://www.cnblogs.com/whaochen/p/4709673.html