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

写在前面

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

问题:

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

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

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

算法:

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

这道题要考虑到进位的问题,当然如果把数组转换成整数,加一后转换成数组也能行,不过这种思路是不是太过简单。我想到的算法就是,定义一个变量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;
    }
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值