给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一。
最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。
你可以假设除了整数 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]
第一次写的,拙劣。
想法就是判断个位,如果个位是9,则进位c是1,个位变0。如果各位不是9,直接加1。
然后从倒数第二位开始判断,值为当前的值加上进位(0或1),如果加上后为10,则当前位变为0,进位c为1;否则进位c为0。
最后是判断特殊情况,如果是99或者999这种情况,如果不特殊考虑的话,将会输出[0,0]或者[0,0,0]。所以判断加完后的值,如果所有位都是0,则在数组最前面加上[1]。
好复杂><
class Solution:
def plusOne(self, digits: List[int]) -> List[int]:
c = 0
if digits[-1] == 9:
c = 1
digits[-1] = 0
else:digits[-1]+=1
for i in range(2,len(digits)+1):
digits[-i] += c
if digits[-i] == 10:
digits[-i] = 0
c = 1
else:
c = 0
if digits.count(0) == len(digits):
digits = [0*i for i in range(len(digits))]
digits = [1] + digits
return digits
第二个办法是先把数组转换成int类型,加一后再转换回数组类型。
class Solution:
def plusOne(self, digits: List[int]) -> List[int]:
number = 0
res = []
length = len(digits)
for i in range(length):
number += digits[i]*10**(length-1-i)
number += 1
if number == 1:
digits[-1] = 1
res = digits
else:
number = str(number)
for i in number:
res.append(int(i))
return res
简化了一点点
class Solution:
def plusOne(self, digits: List[int]) -> List[int]:
number = 0
res = []
for i in range(len(digits)):
number += digits[i]*10**(len(digits)-1-i)
number += 1
if number == 1:
digits[-1] = 1
res = digits
else:
res += [int(i) for i in str(number)]
return res