87. 数组表示数字,对数字加1

给定一个非负整数组成的非空数组,在该数的基础上加一,返回一个新的数组。

最高位数字存放在数组的首位, 数组中每个元素只存储一个数字。

你可以假设除了整数 0 之外,这个整数不会以零开头。

示例 1:

输入: [1,2,3]
输出: [1,2,4]
解释: 输入数组表示数字 123。

示例 2:

输入: [4,3,2,1]
输出: [4,3,2,2]
解释: 输入数组表示数字 4321。

这个题关键在于进位运算,数组的每一个元素只存储一个数字,如果数字为9,再加一,那就为10, 就需要进行进位加法。代码如下:

import unittest

class Solution:
    def plusOne(self, digits):
        """
        :type digits: List[int]
        :rtype: List[int]
        """
        digits[-1] += 1
        i = len(digits)
        new_digits = [0]+digits  #构造新的队列,比前面多一个零,方便进位
        print(new_digits)
        while(new_digits[i]>=10):
            new_digits[i] = new_digits[i]-10
            new_digits[i-1] += 1
            i = i-1

        if (new_digits[0]==0):
            return new_digits[1:]
        else:
            return new_digits

class TestplusOneFunc(unittest.TestCase):
    """Test case"""

    def test_plusOne(self):
        """Test method hammingWeight()"""
        s =Solution()
        self.assertEqual([1,2,4], s.plusOne([1,2,3]))
        self.assertEqual([4,3,2,2], s.plusOne([4,3,2,1]))
        self.assertEqual([1, 0], s.plusOne([9]))
        self.assertEqual([1, 0, 0, 0], s.plusOne([9, 9, 9]))


if __name__ == '__main__':
    unittest.main()