一、问题描述

给定一个由 整数 组成的 非空 数组所表示的非负整数,在该数的基础上加一。最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。你可以假设除了整数 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函数的倒序

Logo

瓜分20万奖金 获得内推名额 丰厚实物奖励 易参与易上手

更多推荐