LeetCode加一
题目:将列表中的所有数字整合后加一
解法:3种
推荐:方法2,方法3
语言:python
题目介绍如下:
题目通俗说明:
给定一个整数列表,按顺序将每个元素整合到一起变成一个组合数,对其+1,再输出组合数将数字分开后的列表
解法如下:
# author:铁臂阿童木
# datetime:2022/1/29 9:32
# software: PyCharm
# 题目:将列表中的元素变成一个数字,再+1,再将此数字按列表形式输出
# 解法:3种
# 推荐:方法2,方法3
# 先定义4个条件列表
digits = [1,2,3]
digits2 = [4,3,2,1]
digits3 = [0]
digits4 = [1,9,9]
# 序号:方法一
# 方法:条件判断法
# 思想:对条件进行判断,根据不同条件写不同的逻辑,组合到一起
# 优点:方法直接速度快省内存
# 缺点:条件判断复杂
def plusOne(digits):
if digits[0] == 0: # 判断0列表情况
digits[0] = 1
return digits
if digits[-1] == 9: # 判断列表末尾为9的情况
if len(digits) == 1: # 细分为列表长度为1的情况
digits[0] = 1
digits.append(0) # 直接将列表修改为[1,0]返回
else: # 列表长度不为1的情况
if digits.count(9) == len(digits): # 判断所有元素都为9
digits[0] = 1 # 将首位改为1
i = 1
while i < len(digits): # 其它位都改为0
digits[i] = 0
i += 1
digits.append(0) # 结尾添加一位0
else: # 不全为9
i = len(digits)-1 # 列表从后往前循环
while i >= 0:
if digits[i] == 9: # 只要元素为9就将其置为0
digits[i] = 0
i -= 1
else:
digits[i] += 1 # 只要不为9直接给这位元素+1退出循环
break
else:
digits[-1] += 1 # 正常情况直接给列表末尾元素+1
return digits
# print(plusOne(digits4))
# 序号:方法二
# 方法:倒序循环判断法
# 思想:对列表倒序循环,判断元素是否为9,如果为9就将其置为0继续循环找到不为0的将其+1,如果循环结束就说明都为9,那就在列表头插入一位1即可
# 优点:速度快省内存,代码简洁
# 缺点:条件判断复杂
def plusOne2(digits):
i = len(digits) - 1 # 列表倒序循环
while i >= 0:
if digits[i] == 9: # 只要元素为9就将其置为0
digits[i] = 0
i -= 1
else:
digits[i] += 1 # 只要不为9直接给这位元素+1退出循环
return digits
digits.insert(0,1)
return digits
# print(plusOne2(digits4))
# 序号:方法三
# 方法:数据类型转化法
# 思想:将列表中数据拼接成字符串,再将字符串转化成整数进行+1运算,再转化成字符串进行循环,对每个元素转化成数字追加到新列表
# 优点:速度快代码简洁
# 缺点:需要定义其他变量占用内存
def plusOne3(digits):
str1 = ''.join(str(digit) for digit in digits) # 将数组中元素拼接成字符串
# print(str1)
nums = int(str1)+1 # 将字符串转换成数字+1
# print(nums)
res = []
for i in str(nums): # 再将得到的新数字转换成字符串循环,将每个元素转换成整数追加到新列表中
res.append(int(i))
return res
print(plusOne3(digits4))
经验:
如果自己编写中出现错误,就针对简单示例数据进行测试,使用编译器的调试工具打断点测试!
个人心得
1.多熟悉各种数据类型的特点
2.考虑数据类型转换
感谢阅读!!!
有错误请您指出!!!
欢迎补充!!!