力扣题解:21.加一(python版)

一、问题描述

给定一个由 整数 组成的 非空 数组所表示的非负整数,在该数的基础上加一。最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。你可以假设除了整数 0 之外,这个整数不会以零开头。
![在这里插入图片描述](https://img-blog.csdnimg.cn/df2d2d9f71f74ec3815837c12598d6c7.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5bCP6LW15ZCM5a2m77yIUHl0aG9u77yJ,size_16,color_FFFFFF,t_70,g_se,x_16![在这里插入图片描述](https://img-blog.csdnimg.cn/bc770be2b35f486493034a5a745cb638.png

二、第一种解法

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函数的倒序

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小赵同学-

非常感谢你!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值