LeetCode 题解工作台
数组形式的整数加法
整数的 数组形式 num 是按照从左到右的顺序表示其数字的数组。 例如,对于 num = 1321 ,数组形式是 [1,3,2,1] 。 给定 num ,整数的 数组形式 ,和整数 k ,返回 整数 num + k 的 数组形式 。 示例 1: 输入: num = [1,2,0,0], k = 34…
2
题型
6
代码语言
3
相关题
当前训练重点
简单 · 数组·数学
答案摘要
我们可以从数组的最后一位开始,将数组的每一位与 相加,然后将 除以 ,并将余数作为当前位的值,将商作为进位。一直循环,直到数组遍历完并且 $k = 0$。最后将答案数组反转即可。 时间复杂度 ,其中 表示 的长度。忽略答案数组的空间消耗,空间复杂度 。
Interview AiBoxInterview AiBox 实时 AI 助手,陪你讲清 数组·数学 题型思路
题目描述
整数的 数组形式 num 是按照从左到右的顺序表示其数字的数组。
- 例如,对于
num = 1321,数组形式是[1,3,2,1]。
给定 num ,整数的 数组形式 ,和整数 k ,返回 整数 num + k 的 数组形式 。
示例 1:
输入:num = [1,2,0,0], k = 34 输出:[1,2,3,4] 解释:1200 + 34 = 1234
示例 2:
输入:num = [2,7,4], k = 181 输出:[4,5,5] 解释:274 + 181 = 455
示例 3:
输入:num = [2,1,5], k = 806 输出:[1,0,2,1] 解释:215 + 806 = 1021
提示:
1 <= num.length <= 1040 <= num[i] <= 9num不包含任何前导零,除了零本身1 <= k <= 104
解题思路
方法一:模拟
我们可以从数组的最后一位开始,将数组的每一位与 相加,然后将 除以 ,并将余数作为当前位的值,将商作为进位。一直循环,直到数组遍历完并且 。最后将答案数组反转即可。
时间复杂度 ,其中 表示 的长度。忽略答案数组的空间消耗,空间复杂度 。
class Solution:
def addToArrayForm(self, num: List[int], k: int) -> List[int]:
ans = []
i = len(num) - 1
while i >= 0 or k:
k += 0 if i < 0 else num[i]
k, x = divmod(k, 10)
ans.append(x)
i -= 1
return ans[::-1]
复杂度分析
| 指标 | 值 |
|---|---|
| 时间 | complexity is O(max(N, log K)) because each digit of num and each digit of k is processed once. Space complexity is O(max(N, log K)) due to storing the result array and any intermediate digits. |
| 空间 | O(\max(N, \log K)) |
面试官常问的追问
外企场景- question_mark
Expect candidates to handle carry propagation correctly for varying array lengths.
- question_mark
Check if the solution avoids converting the array entirely into an integer to prevent overflow.
- question_mark
Look for understanding of digit-wise addition and array reversal to maintain correct order.
常见陷阱
外企场景- error
Forgetting to reverse the result array at the end leading to incorrect digit order.
- error
Not handling remaining carry after finishing array traversal, which can produce missing leading digits.
- error
Assuming k fits into integer conversion, which fails for large num arrays, violating constraints.
进阶变体
外企场景- arrow_right_alt
Adding two array-form integers instead of an integer k, increasing the need for synchronized digit iteration.
- arrow_right_alt
Subtracting an integer from array-form integer, testing handling of borrow instead of carry.
- arrow_right_alt
Supporting negative k, requiring careful treatment of sign and potential negative results in array form.