66. 加一

题目:

思路:

【1】思路很简单,从后往前倒推回去,因为是10进制所以只需要考虑进位即可,会出现旧数组不能容纳新数组的情况,如【9】->【1,0】这种,容量扩大了。

代码展示:

//时间0 ms 击败 100%
//内存40.2 MB 击败 6.67%
class Solution {
    public int[] plusOne(int[] digits) {
        // one 为加1值只会出现一次
        // carryBit代表进位值
        int one = 1 , value = 0, carryBit = 0;
        for (int i = digits.length - 1; i >= 0; i--){
            value = digits[i] + one + carryBit;
            one = 0;
            digits[i] = value % 10;
            carryBit = value / 10;
            if (carryBit == 0) {
                return digits;
            }
        }
        // 如果到了最后出现了进位值,则代表原本数组的长度不够容纳
        // 如【9】在原本的数组+1后变为【0】,还有一个进位值1,故要重构返回值
        int[] res = new int[digits.length+1];
        if (carryBit == 1){
            res[0] = 1;
            for (int i = 1;i < res.length; i++){
                res[i] = digits[i-1];
            }
        }
        return res;
    }
}

//时间0 ms 击败 100%
//内存39.8 MB 击败 90.22%
class Solution {
    public int[] plusOne(int[] digits) {
        for (int i = digits.length - 1; i >= 0; --i) {
            if (digits[i] == 9) {
                digits[i] = 0;
            } else {
                digits[i] += 1;
                return digits;
            }
        }
        
        if(digits[0] == 0){
            int[] arr = new int[1 + digits.length];
            arr[0] = 1;
            System.arraycopy(digits, 0, arr, 1, digits.length);
            return arr;
        }
        return digits;
    }
}

 

posted @ 2023-06-29 12:13  忧愁的chafry  阅读(10)  评论(0编辑  收藏  举报