【leetcode】Python实现-66.加一

本文探讨了在给定一个由非负整数组成的数组基础上加一的问题,并提供了两种不同的解决方案,一种是循环处理进位,另一种是采用递归方式简化代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

66.加一

描述:给定一个非负整数组成的非空数组,在该数的基础上加一,返回一个新的数组。
最高位数字存放在数组的首位, 数组中每个元素只存储一个数字。
你可以假设除了整数 0 之外,这个整数不会以零开头。

示例1

输入: [1,2,3]
输出: [1,2,4]
解释: 输入数组表示数字 123。

示例2

输入: [4,3,2,1]
输出: [4,3,2,2]
解释: 输入数组表示数字 4321。

        l = digits[::]
        i = len(digits)-1
        while i >= 0:
            if l[i]+1 <=9:
                l[i]+=1
                return l
            else:           
                if i == 0:
                    l[i] = (l[i]+1)%10
                    l.insert(0,1)
                    return l        
                elif l[i]+1 > 9:
                    l[i]=(l[i]+1)%10
                    if l[i-1]+1 < 10:
                        l[i-1] = l[i-1]+1
                        return l
                    else:
                        i-=1

先不说我的代码,先看看别人的,如此干净利落!

        if len(digits) == 0:
            digits = [1]
        elif digits[-1] == 9:
            digits = self.plusOne(digits[:-1])
            digits.extend([0])
        else:
            digits[-1] += 1
        return digits

我的思想太粗暴了,题目中说最后一个数要加1.我就老老实实把最后一个元素加一来判断。分两种情况:
1)加1以后小于9。
2)加1以后大于9。但是这个情况又涉及两种情况:a.digits只有一个元素,所以在index=0插入1。b.相加以后产生进位,若将进位加到前面一位数仍产生进位怎么处理。
emmm…我jio得我对步骤的描述并不科学。

大神的就很简洁。题目中也有说digits里的数是1-9,所以只要判断最后一位数是不是9就好。如果是9的话,那个位置就更改为0.而不用向我的一样,再进行求余运算。emmm。。。我把问题的范围扩大了,我的程序可以求解1-18之间的数。这里就两种情况了:最后一位不是9;最后一位是9,那么相加以后会产生进位,就得再接着判断前一位是不是9.这里可以采用循环(像我一样)或者像大神一样(采用递归)。递归的话可以尝试单步调试,有助于理解过程。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值