思路:

  只在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)吧。

转载于:https://www.cnblogs.com/StoneLuo/p/7428143.html

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐