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语言的特点进行实现。
- 在获取一个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'
- 在创建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)]