Given a non-empty array of digits representing a non-negative integer, plus one to the integer.

The digits are stored such that the most significant digit is at the head of the list, and each element in the array contain a single digit.

You may assume the integer does not contain any leading zero, except the number 0 itself.

Example 1:

Input: [1,2,3]
Output: [1,2,4]
Explanation: The array represents the integer 123.

Example 2:

Input: [4,3,2,1]
Output: [4,3,2,2]
Explanation: The array represents the integer 4321.

解法1,用加法思想:
class Solution(object):
    def plusOne(self, digits):
        """
        :type digits: List[int]
        :rtype: List[int]
        """
        # [0]=>[1]
        # [1]=>[2]
        # [9]=>[1, 0]
        # [1, 0]=>[1, 1]
        # [1, 9]=>[2, 0]
        # [9, 9]=>[1, 0, 0]
        # [1,2,3]=>[1,2,4]
        # xxxx9999
        """        
        i = len(digits)-1     
        while i >= 0 and digits[i]+1 > 9:
            digits[i] = digits[i]+1-10
            i -= 1
        if i < 0:
            digits.insert(0, 1)
        else:
            digits[i] += 1
        return digits

 or:

class Solution(object):
    def plusOne(self, digits):
        """
        :type digits: List[int]
        :rtype: List[int]
        """
        # [0]=>[1]
        # [1]=>[2]
        # [9]=>[1, 0]
        # [1, 0]=>[1, 1]
        # [1, 9]=>[2, 0]
        # [9, 9]=>[1, 0, 0]
        # [1,2,3]=>[1,2,4]    
        rd = []
        carry = 0
        digits[-1] += 1
        for d in digits[::-1]:
            cs = carry + d
            rd.insert(0, cs % 10)
            carry = cs//10
        if carry:
            rd.insert(0, carry)
        return rd

 

解法2,本质上就是xxxx9999,找到第一个x:

class Solution(object):
    def plusOne(self, digits):
        """
        :type digits: List[int]
        :rtype: List[int]
        """
        # [0]=>[1]
        # [1]=>[2]
        # [9]=>[1, 0]
        # [1, 0]=>[1, 1]
        # [1, 9]=>[2, 0]
        # [9, 9]=>[1, 0, 0]
        # [1,2,3]=>[1,2,4]
        # xxxx9999
        i = len(digits)-1
        while i>=0 and digits[i] == 9:
            digits[i] = 0
            i -= 1
        if i >= 0:
            digits[i] += 1
        else:
            digits.insert(0, 1)
        return digits

 

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6