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)。返回值不计入空间复杂度。

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐