Plus One

题目

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

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

The digits are stored such that the most significant digit is at the head of the list.

思路分析

这道题的意思是将一个非负数的每一位上的digit放在一个array里面,然后对这个非负数进行加1操作,然后返回值还是一个array。

明白了题意之后,首先应该是将这个数给还原成一个integer,然后对这个integer进行加1操作。得到加1之后的数之后,最后就要想办法将这个integer转换成一个integer的array。

有了上面的思路之后,可以通过以下的几步来实现:

  • 把array所代表的数转换成一个integer
  • 对从array转换来的integer进行加1操作
  • 将加1之后的数转换成String
  • 将String里面的每一个char所代表的substring转换成integer type,并放到一个integer array中

下面的code就是将上面的四个步骤进行了实现:

class Solution(object):
    def plusOne(self, digits):
        """
        :type digits: List[int]
        :rtype: List[int]
        """
        num = 0
        result = []
        for digit in digits:
            num = num * 10 + digit    # >>> Obtain the original integer
        num = num + 1                 # >>> perform number plus one
        str_num = str(num)            # >>> convert integer to string
        for i in range(len(str_num)):
            result.append(int(str_num[i]))   # >>> convert each char substring to integer and append to list
        return result

在具体实现的时候,也可以充分利用Python语言的特点进行实现。

  1. 在获取一个string中的每一个字符时,可以直接获取,而不用index:

使用index来获取string中的每一个字符:

for i in range(len(str_num)):
    result.append(int(str_num[i]))

不使用index来获取string中的每一个字符:

for i in str_num:
    result.append(int(i))

注意string的每一个字符也是一个string类型的】

>>> a = "12"
>>> type(a[0])
<type 'str'>      <<<<< type of a[0] is str, not chr 
>>> a[0]
'1'
  1. 在创建list的时候,不需要创建一个list变量,然后将element一个一个append进去,可以直接在一个list里面写每一个元素

创建list变量,然后将element一个一个append到list中的实现方式:

result = []
for i in str_num:
    result.append(int(i))

不创建list变量,直接在list中写元素的实现方式:

[int(i) for i in str_num]

所以这道题用Python的方式来实现可以优化为:

class Solution(object):
    def plusOne(self, digits):
        """
        :type digits: List[int]
        :rtype: List[int]
        """
        num = 0
        for digit in digits:
            num = num * 10 + digit
        return [int(i) for i in str(num+1)]

results matching ""

    No results matching ""