Leetcode66.Plus One

一开始的解法

class Solution {
    public int[] plusOne(int[] digits) {
        /*
        0   :   1
        99  :   100
        19  :   20
        18  :   19
        
        3 kind
        
        reach to the end? stop x  wrong!
        reach to the end but carry == 1, resize new int[len + 1], the first element is 1
        reach to the end carry == 0, stop
        add carry (1st it's 1) to the cur element 
        
        if (cur == 10) {
            carry = 1;
        } else {
            stop and return
        }
        
        
        
        */
        int carry = 1;
        for (int i = digits.length - 1; i >= 0; i--) {
            digits[i] = (digits[i] + carry) % 10;
            
            if (digits[i] == 0) {
                carry = 1;
            } else {
                carry = 0;
                break;
            }
            
            if (i == 0 && carry == 1) {
                //  resize
                int[] ret = new int[digits.length + 1];

                ret[0] = 1;
                for (int k = 0, j = 1; k < digits.length && j < ret.length; k++, j++) {
                    ret[j] = digits[k];
                }

                digits = ret;
            }                
        }
        
    
        
        return digits;
    }
}

看到最快的答案惊了
当扫到最高位,依然需要进位时,直接int[] newArr = new [n + 1] 然后 newArr[0] = 1
return newArr;
就行了
因为其实,出现这种情况,意味着最高位后面的所有元素都是0!
不需要再重新for loop一遍,把原来的array中元素的值赋给新array了。

你可能感兴趣的:(Leetcode66.Plus One)