LeetCode加一

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.考虑数据类型转换

感谢阅读!!!
有错误请您指出!!!
欢迎补充!!!

在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值