力扣题解:21.加一(python版)
文章目录一、问题描述二、第一种解法1、解题思路2、完整代码三、第二种解法1、解题思路四、第三种解法1、解题思路2、完整代码五、收获一、问题描述给定一个由 整数 组成的 非空 数组所表示的非负整数,在该数的基础上加一。最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。你可以假设除了整数 0 之外,这个整数不会以零开头。二、第一种解法1、解题思路把数组转化成一个整数,给这个整数加一,然后又把
·
一、问题描述
给定一个由 整数 组成的 非空 数组所表示的非负整数,在该数的基础上加一。最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。你可以假设除了整数 0 之外,这个整数不会以零开头。
二、第一种解法
1、解题思路
把数组转化成一个整数,给这个整数加一,然后又把这个整数转化为数组。
2、完整代码
def plusOne(digits):
list1 = [str(i) for i in digits] #使用列表推导式把列表中的单个元素全部转化为str类型
#list1 = ['1', '2', '3']
list2 = ''.join(list1)
#list2 = 123
list3 = int(list2) + 1 #将数组转化为整数并加一
#list3 = 124
result = [int(j) for j in str(list3)]
return result
三、第二种解法
1、解题思路
用一行代码解决这个问题,其实就是对第一种解法的精炼,用到了列表表达式。
## 2、完整代码
def plusOne(digits):
return [int(i) for i in str(int(''.join(str(j) for j in digits)) + 1)]
四、第三种解法
1、解题思路
这个问题可以分为三种:
第一种:是不产生进位的,直接给列表末尾元素加一就可以的。
第二种:是产生进位的,需要把当前元素置为0并进位1.
第三种:这是一种特殊的情况,当digits= [9,9,9],此时需要在列表前面拼接一列表[1],并且原有所有元素都置为1.
2、完整代码
def plusOne(digits):
for i in reversed(range(len(digits))):
digits[i] += 1
if digits[i] < 10: #当加一后不产生进位,直接跳出for循环
break
digits[i] = 0
else:
return [1] + digits
return digits
五、收获
通过这个题学到的知识主要有:
1、join的使用
2、列表表达式的使用
3、for-else的使用
4、range函数的倒序
更多推荐
已为社区贡献1条内容
所有评论(0)