加一

题目:给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一。

最高位数字存放在数组的首位, 数组中每个元素只存储一个数字。

你可以假设除了整数 0 之外,这个整数不会以零开头。

我先声明一点,我有想过用循环,用算法写,可我碰到了这个测试用例:[9],[2,3,9]  还是我思路太窄。。。

然后我就否定我一开始的思路了,暴力写法:

class Solution:
    def plusOne(self, digits: List[int]) -> List[int]:
        ay=digits
        b=''
        for i in range(len(ay)):
            b+=str(ay[i])
        c=int(b)+1
        d=list(str(c))
        e=[]
        for i in range(len(d)):
            e.append(int(d[i]))
        return e
            

思路很简单,读数加一放回数组即可

执行用时 : 56 ms, 在Plus One的Python3提交中击败了64.28% 的用户
内存消耗 : 12.9 MB, 在Plus One的Python3提交中击败了98.73% 的用户

参考一下别人的想法:

class Solution:
    def plusOne(self, digits: List[int]) -> List[int]:
        n = len(digits)
        jinwei = 1
        i = n-1
        while(i>=0):
            temp = digits[i]
            digits[i] = (digits[i] + jinwei) % 10
            jinwei = (temp + jinwei) // 10
            i -= 1
        if(jinwei > 0):
            digits.insert(0, jinwei)
        return digits

这才是正经解题好不,进位思想,第一个循环最后一位加一然后除10余数赋值给最后一位,进位值由temp加1再向下取整赋值,

之后的循环先取当前i位值加上刚才的进位值再取余,进位值再有temp+1向下取整

最后进位如果大于0,在前面把进位插进去

原文地址:https://www.cnblogs.com/dmndxld/p/10792839.html