LeetCode 989. 数组形式的整数加法
题目描述
思路分析
解法一:从后向前模拟(推荐)
核心思路:
- 从数组末尾与整数 k 同时加法,维护进位。
- 每次取余作为当前位,进位继续。
- 最后翻转结果。
复杂度分析:
- 时间复杂度:O(n + log k),其中 n 表示数组长度。
- 空间复杂度:O(n)。
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
class Solution {
public List<Integer> addToArrayForm(int[] num, int k) {
List<Integer> res = new ArrayList<>();
int i = num.length - 1;
int carry = 0;
while (i >= 0 || k > 0 || carry > 0) {
int sum = carry;
if (i >= 0) {
sum += num[i--];
}
if (k > 0) {
sum += k % 10;
k /= 10;
}
res.add(sum % 10);
carry = sum / 10;
}
Collections.reverse(res);
return res;
}
}
func addToArrayForm(num []int, k int) []int {
res := make([]int, 0)
i := len(num) - 1
carry := 0
for i >= 0 || k > 0 || carry > 0 {
sum := carry
if i >= 0 {
sum += num[i]
i--
}
if k > 0 {
sum += k % 10
k /= 10
}
res = append(res, sum%10)
carry = sum / 10
}
for l, r := 0, len(res)-1; l < r; l, r = l+1, r-1 {
res[l], res[r] = res[r], res[l]
}
return res
}
相似题目
| 题目 | 难度 | 考察点 |
|---|---|---|
| 415. 字符串相加 | 简单 | 模拟 |
| 67. 二进制求和 | 简单 | 模拟 |
| 43. 字符串相乘 | 中等 | 模拟 |
| 2. 两数相加 | 中等 | 链表模拟 |
| 66. 加一 | 简单 | 模拟 |
本博客所有文章除特别声明外,均采用
CC BY-NC-SA 4.0
许可协议,转载请注明出处!
