LeetCode 66. 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.

分析

对数组形式的大整数执行 +1 操作,返回新的数组形式的大整数

  • 输入:数组形式的大整数
  • 任务:对整数 +1
  • 条件:可能需要考虑这个整数很大很大,Python 的 int 表示不了(不对,Python 的 int 好像可以无限大)
  • 输出:+1 之后数组形式的大整数

    代码

1
2
3
4
5
6
7
8
9
10
class Solution(object):
def plusOne(self, digits):
"""
:type digits: List[int]
:rtype: List[int]
"""
num = 0
for i in range(len(digits)):
num += digits[i] * pow(10, (len(digits)-1-i))
return [int(i) for i in str(num+1)]

解释

先用 pow 转化成正常大整数,然后 +1,然后转化成字符串,再用 int 转化类型

扩展

不进行类型转换的方式,直接对单个元素操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
class Solution(object):
def plusOne(self, digits):
"""
:type digits: List[int]
:rtype: List[int]
"""
num = 1
for i in reversed(range(len(digits))):
tmp = digits[i]
digits[i] = (digits[i] +num)%10
num = (tmp +num)/10
if num > 0:
digits.insert(0, num)
return digits