【LeetCode】Day16
66.加一给定一个由 整数 组成的 非空 数组所表示的非负整数,在该数的基础上加一。最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。你可以假设除了整数 0 之外,这个整数不会以零开头。代码①:用Python中列表与字符串、整数相互转化def plusOne(digits):string = ''for i in digits:string = string +str(i)num = s
·
66.加一
给定一个由 整数 组成的 非空 数组所表示的非负整数,在该数的基础上加一。
最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。
你可以假设除了整数 0 之外,这个整数不会以零开头。
代码①:用Python中列表与字符串、整数相互转化
def plusOne(digits):
string = ''
for i in digits:
string = string +str(i)
num = str(int(string)+1)
print(type(num))
print(num)
res = []
for j in num:
res.append(int(j))
return res
res = plusOne([1,2,3])
print(res)
class Solution:
def plusOne(self, digits: List[int]) -> List[int]:
return list(map(int, list(str(int(''.join(map(str, digits))) + 1))))
代码②:利用数字结构
def func(digits):
res = 0
n = len(digits)-1
for i in digits:
res = res + (10**n)*i
n -=1
return list(str(res+1))
print(func([1,2,3]))
官方:考虑可能会发生数字溢出的情况
只需要对数组 digits 进行一次逆序遍历,找出第一个不为 9 的元素,将其加一并将后续所有元素置零即可。如果 digits 中所有的元素均为 9,那么对应的「思路」部分的第三种情况,我们需要返回一个新的数组。
class Solution:
def plusOne(self, digits: List[int]) -> List[int]:
n = len(digits)
for i in range(n-1,-1,-1):
if digits[i] != 9:
#倒着数第一个不为9的数字加1
digits[i] +=1
#从不为9的数字后一个位置起全部变为0
for j in range(i+1,n):
digits[j] = 0
return digits
#全为9
return [1]+[0]*n
复杂度:
时间复杂度:O(n),其中 nn 是数组 digits 的长度。
空间复杂度:O(1)。返回值不计入空间复杂度。
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
已为社区贡献2条内容
所有评论(0)