【每日一题】【LeetCode】【第六天】【Python】加一

加一的解决之路= =

题目描述

在这里插入图片描述

测试案例(部分)

在这里插入图片描述

第一次

+1这个很好理解,唯一的难点就是个位+1导致的进位的问题,可能会只会导致十位+1,也有像8999这样产生多次进位的情况。

为了解决进位问题,自己想到了第三天学到的逆序方法,然后从后往前判断是否有进位情况产生,满足>=10的进位条件,就-10,并将前一位进行+1操作。

class Solution(object):
    def plusOne(self, digits):
        """
        :type digits: List[int]
        :rtype: List[int]
        """
        digits[-1] += 1
        n = len(digits)
        for i in range(n-1, 0, -1):
            if digits[i] >= 10:
                digits[i] -= 10
                digits[i-1] += 1
        return digits

测试,通过了。直接提交,报错。

在这里插入图片描述

第二次

有点东西的,自己考虑漏了一种情况,就是最高位是9的情况,此时要产生一个新的数位,我们来想一下该怎么完善,来应对这种情况。

注意一下这个range(n-1, 0, -1),输出的结果应该是n-1,n-2, ..., 2, 1,是没有0的,所以才保证了for循环中,digits[i-1] += 1不会越界。但也正是因为没有0,所以会导致循环中不会检测最高位是否满足进位条件。

所以,接下来就简单了,这个情况需要我们在循环之后进行处理。开始完善代码。

class Solution(object):
    def plusOne(self, digits):
        """
        :type digits: List[int]
        :rtype: List[int]
        """
        digits[-1] += 1
        n = len(digits)
        for i in range(n-1, 0, -1):
            if digits[i] >= 10:
                digits[i] -= 10
                digits[i-1] += 1
        if digits[0] >= 10:
            digits[0] -= 10
            digits = [1] + digits
        return digits

循环结束后,再进行一个判断,如果最高位满足进位要求,利用python中列表可加性,直接加一个1上去(就等于Concat合并操作),这样就得到了所需的结果。

测试正确,提交,通过了。而且费时超过了77%的人,可以了。

在这里插入图片描述

结束。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值