【数组相关】66. 加一

原题链接:https://leetcode-cn.com/problems/plus-one/



不建议将数组中的数字拼接成整数计算,这样的话会导致整形溢出。

在操作的时候,注意一下进位的问题

  • 例如[1,2,9]+1=[1,3,0]
  • 例如[1,9,9]+1=[2,0,0]
  • 特殊的[9,9,9]+1=[1,0,0,0]

也就是说如果数组中全是9,则计算出来的数组长度比原先多1,且第一个元素是1,其他都是0。

开始的个位+1(carry),可以理解为是之前的数字进位1而来的

所以,从个位开始,先算+1后的数字num,再计算需要填入的数字num%10,后计算进位carry=num/10

  • 如果carry==0表示不产生进位,则停止操作即可;
  • 如果carry==1则继续向前进位+1;
  • 如果所有的数字都操作完毕,carry还是等于1的话,只能说明原先的数组中都是9
class Solution {
    public int[] plusOne(int[] digits) {
        int carry=1;
        for(int i=digits.length-1;i>=0;i--){
            int num=digits[i]+carry;
            digits[i]=num%10;
            carry=num/10;
            if(carry==0){
                break;
            }
        }
        if(carry==1){   //只能说明数组当中肯定全是9
            int[] arr=new int[digits.length+1];
            arr[0]=1;
            return arr;
        }
        return digits;
    }
}
发布了88 篇原创文章 · 获赞 142 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/u010189239/article/details/104670261