先放题目:
给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一。
最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。
你可以假设除了整数 0 之外,这个整数不会以零开头。
示例 1:
输入: [1,2,3]
输出: [1,2,4]
解释: 输入数组表示数字 123。
示例 2:
输入: [4,3,2,1]
输出: [4,3,2,2]
解释: 输入数组表示数字 4321。
我的思路是将输入数组变成int变量,对变量+1后再映射成数组。
映射时用map()函数会相对简单,并且能够实现。但起初我对map()函数不熟悉的时候自己写了一个将int映射成list的函数,出现了问题。
先上代码:
class Solution:
def plusOne(self, digits: List[int]) -> List[int]:
length = len(digits)
figure = 1
for digit in digits:
length -= 1
figure += digit * (10**length)
result = self.f(figure)
# result = list(map(int,str(figure)))
return result
def f(self,number: int) -> List[int]:
a = int(number / 10); #商
b = [int(number % 10)]; #余数
if a == 0 : return b
else :
L = self.f(a)
L.extend(b)
return L
对于大多数的测试用例都能通过,直到遇到这一条:
输入:
[6,1,4,5,3,9,0,1,9,5,1,8,6,7,0,5,5,4,3]
输出:
[6,1,4,5,3,9,0,1,9,5,1,8,6,7,0,6,6,2,4]
预期:
[6,1,4,5,3,9,0,1,9,5,1,8,6,7,0,5,5,4,4]
通过实验,发现错误与位数有关。
我的输入
[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]
我的答案
[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2]
预期答案
[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2]
如上例子中,直到手动把1累加到18位,才会出现答案与预期不一致的问题。
原本猜测,是python整型变量的大小范围问题。经过查阅资料和实验,排除了该种可能性,因为其一,python的整型变量没有大小限制,其次,通过map()函数成功通过了测试,说明上述代码中figure这个变量是准确的。
本人才疏学浅,没能解决这个问题,希望各位大佬慷慨相授!谢谢!