力扣: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 = 0for index, num in enumerate(digits[::-1]):if index == 0:if digits[-1] == 9:digits[-1] = 0carry = 1if index == len(digits) - 1:digits.insert(0, 1)else:digits[-1] = num + 1breakelse:if carry == 1:if num == 9:digits[len(digits) - 1 - index] = 0if index == len(digits) - 1:digits.insert(0, 1)else:digits[len(digits) - 1 - index] = num + 1breakelse:breakreturn digits