力扣:66. 加一(Python3)

题目:

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

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

你可以假设除了整数 0 之外,这个整数不会以零开头。

来源:力扣(LeetCode)
链接:力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台

示例:

示例 1:

输入:digits = [1,2,3]
输出:[1,2,4]
解释:输入数组表示数字 123。


示例 2:

输入:digits = [4,3,2,1]
输出:[4,3,2,2]

解释:输入数组表示数字 4321。


示例 3:

输入:digits = [0]
输出:[0]

解法:

最后1位+1,如果没有进位就可以返回了,如果有进位,一直向前进位,直到不再产生进位。如果第1位也有进位,在列表头添加1。

知识点:

1.列表切片:list[start : end : step],start : 起始索引,默认为0;end:结束索引,不包含,默认为列表的长度;step:步长,默认为1,当省略步长时,可以同时省略后一个冒号,步长为正时,从左向右取值,步长为负时,反向取值。步长为1,表示1个1取值,步长为2,表示间隔取值。如果步长为负数,要么起始和结束索引都省略,要么起始在结束位置后。在Python中,序列的序号即可以从左向右以0开始依次增加,也可以从右向左以 -1开始依次减少,因此通过的序号访问序列中的元素,同一个元素可以有2个序号。

代码:

class Solution:
    def plusOne(self, digits: List[int]) -> List[int]:
        carry = 0
        for index, num in enumerate(digits[::-1]):
            if index == 0:
                if digits[-1] == 9:
                    digits[-1] = 0
                    carry = 1
                    if index == len(digits) - 1:
                        digits.insert(0, 1)
                else:
                    digits[-1] = num + 1
                    break
            else:
                if carry == 1:
                    if num == 9:
                        digits[len(digits) - 1 - index] = 0
                        if index == len(digits) - 1:
                            digits.insert(0, 1)
                    else:
                        digits[len(digits) - 1 - index] = num + 1
                        break
                else:
                    break
        return digits

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