66 plus one

| 分类 leetcode  | 标签 array 

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

我的想法很简单,就是单纯的根据数字加1进行每位运算,和下面的代码差距在于没有过多的去想 暗示的一些条件。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
public int[] plusOne(int[] digits) {
if(digits == null || digits.length == 0) return null;
int carry = 1; for(int i = digits.length-1;i >= 0; i--){ digits[i] += carry; if(digits[i] >= 10){ digits[i] -= 10; carry = 1; }else{ carry = 0; break; } } if(carry == 1 ){ int[] tmp = new int[digits.length + 1]; for(int i = 0; i < digits.length; i++){ tmp[i+1] = digits[i]; } tmp[0] = 1; return tmp; } return digits; }

2 most votes

根据 hello_today_zezedi 改的。 算法:从后往前遍历,如果数字为9,那么则该数字变为0,继续遍历下一个数字,如果不是9,那么该数字加1,返回digits; 只有数字是9 9 9 这类的才会产生新的进位。注意到除了进位,其他都为0。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
public int[] plusOne(int[] digits) {
        if(digits == null || digits.length == 0) return null;
        for(int i = digits.length - 1; i >= 0; i--){
            if(digits[i] == 9){
                digits[i] = 0;
            }else{
                digits[i]++;
                return digits;
            }
        }
            int[] result =  new int[digits.length+1];
            result[0] = 1;
            return result;
    }


上一篇     下一篇