问题描述:
下面提供两种解决办法
方法一 :数组 数字化 返回两数相加 优点实现起来代码简单 缺点 效率低下
class Solution: def addToArrayForm(self, A: List[int], K: int) -> List[int]: s=0 n=len(A)-1 while n>=0: s+=A[len(A)-n-1]*10**n n-=1 return [int(i) for i in str(s+K)]
下面进行优化:
class Solution: def addToArrayForm(self, A: List[int], K: int) -> List[int]: l1=len(A)-1 add=0#进制 answer=[] while l1>=0 or K!=0:#只要数组没有被遍历完 x=0 if l1<0 else A[l1] y=0 if K==0 else K%10 sum=x+y+add add=sum//10 answer.append(sum%10) l1-=1 K//=10 if add>0:answer.append(add) return answer[::-1]
代码分析:用add储存进制数,一开始同时从A和K的最右端遍历
细节1:大可不必再创建一个数组K,可以直接利用%和//的特点,提高时间效率
细节2:如果l1<0即意味着A[l1]默认为0了。实际上sum=A[l1]+K%10+add
从数学角度讲 l1>=0 sum的表达式的确没错 可是当l1<0 便首先报错 因而就无所谓执行到sum这一步了 这是由于A[l1]是一种访问列表的操作 前提就是不能越界 因而 使用两个变量X,Y来替代作为每次循环要执行的参数,换句话说,在写代码的过程中,要合理引入变量,当然直接访问也是一个不错的选择如果不报错
细节3:当执行到最前端的时候 比如 是8+3 那么answer的最后一位保存了‘1’,而进制1并没有保存下来,因为我们每次append进去的都是取余后的结果。所以需要对最前端另外处理,如果add>0(说明满十)就append add
细节4:逆序输出
我是小郑 期待和你一起进步😀