66. Plus One

题目描述

给定一个数组表示非负整数,其高位在数组的前面,对这个整数加1,返回新数组。

我的解法——倒置后相加再倒置

  • 先将数组倒置,后面加一个0,然后执行进位操作,然后再倒回来
  • n的复杂度。
  • 结果:beat 42.78%
class Solution(object):
    def plusOne(self, digits):
        """
        :type digits: List[int]
        :rtype: List[int]
        """
        length = len(digits)
        
        for i in range(length/2):
            digits[i],digits[length - i - 1] = digits[length - i - 1],digits[i]
        digits.append(0)
        
        now = 1 # 当前位需要加的数
        i = 0
        while(i < length + 1 and now != 0):
            last = digits[i]
            digits[i] = (now + digits[i]) % 10
            if(now + last >= 10):
                now = (now + last) / 10
            else:
                now = 0
            i += 1
        
        if(digits[length] == 0):
            digits = digits[0:length]
        else:
           length += 1
           
        for i in range(length/2):
            digits[i],digits[length - i - 1] = digits[length - i - 1],digits[i]
    
        return digits

最优解法——直接相加

  • 最好的解法!!!
  • 直接相加,最后对第一位是否进位进行特判即可
  • n的时间复杂度
public int[] plusOne(int[] digits) {
    int carry = 1;
    for (int i = digits.length-1; i>= 0; i--) {
        digits[i] += carry;
        if (digits[i] <= 9) // early return 
            return digits;
        digits[i] = 0;
    }
    int[] ret = new int[digits.length+1];
    ret[0] = 1;
    return ret;
}