思路
从后往前,逐个相加
代码1
class Solution:
def addToArrayForm(self, num: List[int], k: int) -> List[int]:
n = len(num)
carry = 0
for i in range(n - 1, -1, -1):
cur = num[i] + k % 10 + carry
k = k // 10
carry = cur // 10
cur = cur % 10
num[i] = cur
while k != 0:
cur = k % 10 + carry
carry = cur // 10
cur = cur % 10
k = k // 10
num.insert(0, cur)
while carry != 0:
cur = carry
carry = cur // 10
cur = cur % 10
num.insert(0, cur)
return num
复杂度
时间复杂度 o(min(n,m)) ??
空间复杂度 o(1))
代码2
class Solution:
def addToArrayForm(self, num: List[int], k: int) -> List[int]:
n = len(num)
# num比k长
# num比k短
carry = 0
for i in range(n - 1, -1, -1):
cur = num[i] + carry + k % 10
num[i], carry = cur % 10, cur // 10
k = k // 10
# k += carry
while k != 0 or carry != 0:
cur = carry + k % 10
num.insert(0, cur % 10)
carry = cur // 10
k = k // 10
return num
复杂度
时间复杂度 o(nk) ??
空间复杂度 o(1))
参考题解
参考1
多个解法
直接把K加到A中
class Solution:
def addToArrayForm(self, A: List[int], K: int) -> List[int]:
i = len(A) - 1
while K:
A[i] += K
K, A[i] = A[i] // 10, A[i] % 10
i -= 1
if i < 0 and K:
A.insert(0,0)
i = 0
return A
作者:musiala
链接:https://leetcode-cn.com/problems/add-to-array-form-of-integer/solution/pythonc-san-chong-jie-fa-by-milomusiala-7wc5/
把K变成数组
class Solution:
def addToArrayForm(self, A: List[int], K: int) -> List[int]:
K = list(map(int,str(K)))
res = []
i,j = len(A)-1,len(K)-1
carry = 0
while i >= 0 and j >= 0:
res.append(A[i] + K[j] + carry)
res[-1],carry = res[-1] % 10, res[-1] // 10
i -= 1
j -= 1
while i >= 0:
res.append(A[i] + carry)
res[-1],carry = res[-1] % 10, res[-1] // 10
i -= 1
while j >= 0:
res.append(K[j] + carry)
res[-1],carry = res[-1] % 10, res[-1] // 10
j -= 1
if carry:
res.append(1)
return res[::-1]
作者:musiala
链接:https://leetcode-cn.com/problems/add-to-array-form-of-integer/solution/pythonc-san-chong-jie-fa-by-milomusiala-7wc5/
参考2
总结模版
加法模版
不管两个数是列表形式,还是数组形式
当前位 = (A 的当前位 + B 的当前位 + 进位carry) % 10
while ( A 没完 || B 没完)
A 的当前位
B 的当前位
和 = A 的当前位 + B 的当前位 + 进位carry
当前位 = 和 % 10;
进位 = 和 / 10;
移位
A++
B++
判断还有进位吗
作者:lilyunoke
链接:https://leetcode-cn.com/problems/add-to-array-form-of-integer/solution/989-ji-zhu-zhe-ge-jia-fa-mo-ban-miao-sha-8y9r/
参考3
本质是两数之和