66 Plus One

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

题目:

Given a non-negative number represented as an array of digits, plus one to the number.

The digits are stored such that the most significant digit is at the head of the list.

解题思路:

  1. 保持一个进位变量。
  2. 数组的每一位都需要考虑该位数字是不是等于 9,以及进位是否为 1。

需要注意的是,当最高位有进位时,需要开辟新的数组,以满足增加的最高位,并把最高位赋值为 1,此时其它位都为 0。

注意:
为了使算法只遍历一次数组,不需要过早开辟长度大于 digits.length 的新数组。因为只有当原始数据的所有数位都为 9 时,最高位进位才会发生。

public class Solution {
    public int[] plusOne(int[] digits) {
        if(digits == null || digits.length == 0)
            return digits;
        int len = digits.length;
        int[] res = new int[len];
        int reminder = 0;
        for(int i = len - 1; i >= 0; i --) {
            if(i == len - 1) {
                if(digits[i] == 9) {
                    reminder = 1;
                    res[i] = 0;
                } else
                    res[i] = digits[i] + 1;
                continue;
            }
            if(digits[i] < 9) {
                res[i] = digits[i] + reminder;
                reminder = 0;
            }
            else {
                if(reminder == 1) {
                    res[i] = 0;
                    reminder = 1;
                } else
                    res[i] = digits[i] + reminder;
            }
        }
        if(reminder == 1) {
            res = new int[len + 1];
            res[0] = 1;
        }
        return res;
    }
}
108 / 108 test cases passed.
Status: Accepted
Runtime: 304 ms
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值