2015年6月25日星期四

Plus One leetcode

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.
从数组最后一位开始检查, 让i位加上进位 如果= 10 那么继续进一位.  如果不等于10那么就不往前进位了 直接跳出.
如果到i = 0时候还进位没有跳出 说明这时候遇到的数组内全是9 所以需要建立一个新数组 长度为当前长度+1 (99-->100 , 999-->1000) 并且让数组的第0位为1 其它位为0
扫描一遍 复杂度O(n) 如果不new新数组 空间O(1) 新数组就变成了O(n)

public class Solution {
    public int[] plusOne(int[] digits) {
        if (digits == null || digits.length == 0) {
            return digits;
        }
        int next = 1;
        for (int i = digits.length - 1; i >= 0; i--) {
            digits[i] += next;
            if (digits[i] == 10) {
                digits[i] = 0;
            } else {
                return digits;
            }
        }
        int [] res = new int[digits.length + 1];
        res[0] = 1;//只有全是9时候才需要new一个新数组 新数组存储1000...
        return res;
    }
}

没有评论:

发表评论