欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

LeetCode算法题(数组相关)(十一)——加一

程序员文章站 2022-03-01 20:45:27
...

写在前面

刷算法题是真的会上瘾,本来这周打算早早看完论文,没想到一刷算法题就停不下来了,论文也被搁置了。做出这道题就去看论文。。。。。

问题:

给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一。

最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。

你可以假设除了整数 0 之外,这个整数不会以零开头。

算法:

刚刚看到这个题的时候,感觉出这个题的人是不是脑子冒泡了出这么简单的题,做着做着发现还是自己太年轻了。

LeetCode算法题(数组相关)(十一)——加一

这道题要考虑到进位的问题,当然如果把数组转换成整数,加一后转换成数组也能行,不过这种思路是不是太过简单。我想到的算法就是,定义一个变量up代表进位,个位首先加一,判断其等不等于10,如果等于10,令进位up=1。然后循环十位到最高位,每位都与up相加,等于10就令up=1.不等于0就令up=0.

实现:

class Solution {
    public int[] plusOne(int[] digits) {
        int len = digits.length,up=0;
        int [] rs = new int[len+1];
        if(digits[len-1]+1==10){
                digits[len-1] = 0;
                up=1;
        }
        else{
            digits[len-1]++;
        }
        for(int i = len-2;i>=0;i--){
            if(up+digits[i]==10){
                up=1;
                digits[i] = 0;
            }
           else{
               digits[i] = up+digits[i];
               up=0;
           }
        }
        if(digits[0] == 0){
            for(int i = 1;i<len+1;i++){
                rs[i] = digits[i-1];
            }
            rs[0] = 1;
        }
       
        return digits[0]==0?rs:digits;
    }
}