【LeetCode】66. 加一

1 问题

给定一个由 整数 组成的 非空 数组所表示的非负整数,在该数的基础上加一。

最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。

你可以假设除了整数 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]

2 答案

自己写的,回溯算法,结果正确,但是一旦修改digits就不行了,我也不知道是为什么,猜测题目应该是要求不能对digits地址进行修改

class Solution:
    def plusOne(self, digits: List[int]) -> List[int]:
        def dfs(end, digits):
            if digits[end] != 9:
                digits[end] += 1
                return  # 不能在这里return digits,返回会为null,函数要一层一层返回
            else:
                digits[end] = 0
                if end == 0:
                    # digits = [1].extend(digits) # 不行
                    # digits = [1] + digits  # 不行
                    digits.insert(0,1)  # 行
                    return 
                else:
                    dfs(end-1, digits)

        dfs(len(digits)-1, digits)  # 一层一层返回
        return digits

【LeetCode】66. 加一_第1张图片
官方解,区别在于没有用回溯,使用一个新的list来储存0,最后返回digits和新list的拼接

class Solution:
    def plusOne(self, digits: List[int]) -> List[int]:
        newlst = []
        while digits and digits[-1] == 9:
            digits.pop() 
            newlst.append(0)  # 使用一个新的list来储存0
        if not digits:
            return [1] + newlst
        else:
            digits[-1] += 1
            return digits + newlst

https://leetcode.cn/problems/plus-one/solutions/317867/python-tou-ji-qu-qiao-fa-he-zheng-chang-jie-fa-by-/

你可能感兴趣的:(LeetCode,Python,leetcode,算法)