文章

Leetcode--66. 加一

Leetcode--66. 加一

给定一个由 整数 组成的 非空 数组所表示的非负整数,在该数的基础上加一。最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。

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

优秀示例1

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;
            }

        }
        //如果所有位都是进位,则长度+1
        digits= new int[digits.length + 1];
        digits[0] = 1;
        return digits;
    }
}

i 作为角标倒序遍历数组,在if判断中digits[i]等于9,则将其置于0,进行下一次循环 i+1使得digits[i]为原来数的前一位(模拟进位)实现进位后+1,for循环重复该步骤。

在上述过程中若不进位则直接返回加1后的数组,有进位跑完for循环后,创建新数组,将首位置1后返回新数组。

优秀示例2

class Solution {
    public int[] plusOne(int[] digits) {
        for (int i = digits.length - 1; i >= 0; i--) {
            digits[i]++;
            digits[i] = digits[i] % 10;
            if (digits[i] != 0) return digits;
        }
        digits = new int[digits.length + 1];
        digits[0] = 1;
        return digits;
    }
}

在for循环中倒序遍历,digits[i] = digits[i] % 10来判断是否需要进位,if语句判断若能整除则进位,digits[i]指向前一位后重复该步骤。

若全部位数加完后没有return数组,创建新数组,将首位置1后返回新数组。

License:  CC BY 4.0