一、题目描述
给定一个由 整数 组成的 非空 数组所表示的非负整数,在该数的基础上加一。
最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。
你可以假设除了整数 0 之外,这个整数不会以零开头。
示例 1:
输入:digits = [1,2,3]
输出:[1,2,4]
解释:输入数组表示数字 123。
示例 2:
输入:digits = [4,3,2,1]
输出:[4,3,2,2]
解释:输入数组表示数字 4321。
示例 3:
输入:digits = [0]
输出:[1]
提示:
- 1 <= digits.length <= 100
- 0 <= digits[i] <= 9
二、我的想法
1.最开始的想法是将所有数字转成字符串,字符串转成数字类型之后加一,然后再转成列表类型。但是没写哈哈。
2.后来想到的是我干脆在列表里操作,用单指针。先将最后一位的数字 +1,使指针指向它。如果加一后变为 10 了,就进入循环操作:将 10 改成 0 ,指针前移一位;
(1)如果前移之后指向 0 之前了,说明列表应该从 “999” 变为 “1000” 了,即需要在列表最前端加一个数字 1;
(2)如果前移之后之后没有指向 0 之前,那就正常将数字 +1 就可以了。
class Solution:
def plusOne(self, digits: List[int]) -> List[int]:
digits[-1] += 1
digitsLen = len(digits) - 1
while digits[digitsLen] == 10:
digits[digitsLen] = 0
digitsLen -= 1
if digitsLen != -1:
digits[digitsLen] += 1
else:
digits[0] = 0
digits.insert(0, 1)
return digits
return digits
三、其他人的题解
Hushด้้้ 的题解 python纯小白写法,只有歪门邪路,不考虑任何效率,这个就是转成字符串之后再操作的。
class Solution:
def plusOne(self, digits: List[int]) -> List[int]:
s = ''
l = []
for i in digits:
s = s + str(i) #全部转换成字符串
for n in str(int(s) + 1): #字符串转换成int类型然后+1,再遍历字符串 添加到数组
l.append(int(n))
return l