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