[leetCode]66. 加一

在这里插入图片描述

解法

数组每一位只能包含一位数字,只有当数字大于9时才会产生进位,所以只需要从后往前遍历,每次加上进位,当下一位需要进位时j置一,否则置0。循环结束时如果首位为0则需要扩容数组并将首位置1。

class Solution {
    public int[] plusOne(int[] digits) {
        int len = digits.length;
        int j = 1;//进位
        for(int i = len - 1; i >= 0; --i){
            digits[i]+=j;
            if(digits[i]>9){//判断下一位是否需要进位
                digits[i] = digits[i] % 10;
                j = 1;
            }else{
                j = 0;
            } 
        }
        if(digits[0] == 0){//最高位为0则需要扩容数组
            digits = new int[len + 1];
            digits[0] = 1; 
        }
        return digits;
    }
}

下面这种方法思路差不多,但是写法更优雅,使用当前位取余后是否为0来判断下一位是否需要进位。

class Solution {
    public int[] plusOne(int[] digits) {
        int len = digits.length;
        for(int i = len - 1; i >= 0; --i){
            digits[i]++;
            digits[i]%=10;//digits[i]< 10则保持不变,>10 取余数
            if(digits[i] !=0 )return digits;//判断下一位是否需要+1,digits[i]!=0说明没有产生进位
        }
        digits = new int[len + 1];
        digits[0] = 1;
        return digits;
    }
}
posted @ 2020-06-29 08:19  消灭猕猴桃  阅读(56)  评论(0编辑  收藏  举报