给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一。
最高位数字存放在数组的首位, 数组中每个元素只存储一个数字。
你可以假设除了整数 0 之外,这个整数不会以零开头。
示例 1:
输入: [1,2,3]
输出: [1,2,4]
解释: 输入数组表示数字 123。
示例 2:
输入: [4,3,2,1]
输出: [4,3,2,2]
解释: 输入数组表示数字 4321。 我的错误解法:
不能转为数字然后操作,算法正确但是会越界然后得不到正确结果
public static int[] plusOne(int[] digits) { int num = 0;
for (int i=0;i<digits.length;i++) {
num = num*10 + digits[i];
}
num = num + 1;
//新数长度
int length = 0;
int k = num;
while(k !=0) {
k /= 10;
length++;
}
int[] res = new int[length];
for (int i=length-1;i>=0;i--) {
res[i] = num%10;
num = num/10;
}
return res;
}
参考解法:
链接:https://www.nowcoder.com/questionTerminal/4d135ddb2e8649ddb59ee7ac079aa882
来源:牛客网 //1.不需要flag! 从右向左,遇到9就变0,非9就加1,然后break;
//2.digits[0]如果等于0,说明长度增加了1,则新建数组,首位为1,其他位为0;
public int[] plusOne(int[] digits) {
for (int i = digits.length-1; i >= 0 ; i--) {
if (digits[i] == 9)digits[i] = 0;
else {
digits[i] = digits[i]+1;
break;
}
}
if (digits[0] == 0){
int[] arr = new int[digits.length+1];
arr[0] = 1;
for (int i = 1; i < arr.length; i++) arr[i] = 0;
return arr;
}
return digits;
}