【leetcode】Python实现-66.加一

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.这里可以采用循环(像我一样)或者像大神一样(采用递归)。递归的话可以尝试单步调试,有助于理解过程。

猜你喜欢

转载自blog.csdn.net/qq_34364995/article/details/80284300