思路:
只在digit数组的最后一位加一,如果加一产生进位则当前为减10并且修改进位变量使其在下一次循环的时候对下一位产生加一的影响,如果没有进位的产生直接break循环。
最后判断如果最高位有进位,在重新申请数组(比原来数组长一位),把第一位设置为1,其他的把上面的数组复制过来即可。
【正确代码】
1 class Solution { 2 public int[] plusOne(int[] digits) { 3 boolean carry = false;//设置进位 4 digits[digits.length - 1]++; 5 for (int i = digits.length - 1; i >= 0; i--) { 6 digits[i] = digits[i] + (carry ? 1 : 0); 7 if (digits[i] >= 10) { 8 carry = true; 9 digits[i] -= 10; 10 }else { 11 carry = false; 12 break; 13 } 14 } 15 //如果最高位有进位的话需要判断溢出 16 if (carry) { 17 int[] res = new int[digits.length + 1]; 18 res[0] = 1; 19 for (int i = 1; i < digits.length; i++) { 20 res[i] = digits[i]; 21 } 22 return res;//注意这里res是局部变量,不能直接返回 23 }else { 24 return digits; 25 } 26 } 27 }
复杂度分析:
时间空间都是O(n)吧。
所有评论(0)