【题目描述】
给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一。
最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。
你可以假设除了整数 0 之外,这个整数不会以零开头。
示例 1:
输入: [1,2,3]
输出: [1,2,4]
解释: 输入数组表示数字 123。
示例 2:
输入: [4,3,2,1]
输出: [4,3,2,2]
解释: 输入数组表示数字 4321。
【解答】
- 解法一:特判:当digits = [0] 或者 digits最后一个元素也就是digits[-1]小于9时,只需要将最后一个元素的值加1就可以了。
然后考虑遇到9的情况,令 i = len(digits) - 1,从列表最后一个元素开始遍历,如果digits[i] = 9,则令digits[i]=0,且 i -= 1;
这个while循环结束可能有两种情况:① digits[i] != 9,例如digits = [1,2,4,9,9],则循环停止时 i = 2,digits[2] != 9,循环结束;
②digits中所有元素均为9,例如digits = [9,9,9],那么当 i = 0 时,循环还在继续,最后 i = -1,此时digits[-1] = 0 ,循环结束。
如果是情况①,只需要将digits[i] += 1;
如果是情况②,需要在列表最前面插入一个1。
class Solution: def plusOne(self, digits: List[int]) -> List[int]: if digits[0] == 0 or digits[-1] < 9: digits[-1] += 1 return digits i = len(digits) - 1 #i是最后一个元素的索引 while digits[i] == 9: digits[i] = 0 i -= 1 if i == -1: #所有元素均为9 digits.insert(0,'1') else: digits[i] += 1 return digits
执行用时 :36ms
- 解法二:利用python自带的str、int、list之间的相互转换快速解决
class Solution: def plusOne(self, digits: List[int]) -> List[int]: digits = [str(i) for i in digits] #将列表中int元素转化为string类型 s1 = ''.join(digits) #将列表转化成字符串 num = int(s1) + 1 #将字符串转化成数字直接+1 s2 = str(num) #将+1后的数字转换成字符串(因为int不能直接转成list) digits = list(s2) # 将s2转换成list类型 return digits
执行用时 :28 ms, 在所有 python3 提交中击败了99.37%的用户
内存消耗 :12.8 MB, 在所有 python3 提交中击败了99.52%的用户