加一

Lintcode 407

这道题也是Lintcode娘随机给我挑的一道题目。

已知:

给定一个非负数,表示一个数字数组,在该数的基础上+1,返回一个新的数组。
该数字按照大小进行排列,最大的数在列表的最前面。

示例:

给定 [1,2,3] 表示 123, 返回 [1,2,4].
给定 [9,9,9] 表示 999, 返回 [1,0,0,0].

思路:

题意还是比较清晰的。
思路的话,就是模拟我们自身思考的过程:
当一个数加1,如果结果为10,则当前位为0,且下一次循环上的数字依旧要加1。
如果结果为10以下,则结果就是计算的结果,且之后再无进位。

代码如下:

public class Solution {
    public int[] plusOne(int[] digits) {
        List<Integer> ret = new ArrayList<Integer>();
        //要加1的时候令flag为true,默认初始数字最后一位也要+1,所以默认true
        boolean flag = true;
        for (int i = digits.length - 1; i >= 0; i--) {
            if (flag) {
                digits[i]++;
            }
            //运算结果为10,则向前进位,进入下一次循环,否则再也不进位
            if (digits[i] == 10) {
                ret.add(0);
                flag = true;
            } else {
                ret.add(digits[i]);
                flag = false;
            }
        }

        //最后一次进位,在这里,123我们存的形式势3->2->1
        if (ret.get(ret.size() - 1) == 0) {
            ret.add(1);
        }

        int[] result = new int[ret.size()];
        for (int i = 0; i < ret.size(); i++) {
            result[i] = ret.get(ret.size() - 1 - i);
        }
        return result;
    }
}

心累,卖不动萌了,┓(;´_`)┏,看官随意,如果有好的意见欢迎交流

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值