LeetCode:989. 数组形式的整数加法
模拟题
手动加减法
AC Code 模拟
class Solution {
public List<Integer> addToArrayForm(int[] a, int k) {
// 手动加减法题型
// 1 <= A.length <= 10000
int alen = a.length;
List<Integer> list = new ArrayList<>();
int r = 0;
// 从个位开始处理
for(int i = alen - 1; i >= 0; i--) {
int tmp = a[i] + k % 10 + r;
// 进位
r = tmp / 10;
// 大于等于 10 了
if(tmp > 9) tmp -= 10;
list.add(tmp);
k /= 10;
}
while(k != 0) {
int tmp = k % 10 + r;
// 进位
r = tmp / 10;
if(tmp > 9) tmp -= 10;
list.add(tmp);
k /= 10;
}
// 处理进位
if(r != 0) list.add(r);
Collections.reverse(list);
return list;
}
}
AC Code 简洁版
class Solution {
public List<Integer> addToArrayForm(int[] a, int k) {
List<Integer> list = new ArrayList<>();
int lastNum = k, len = a.length;
int idx = len - 1;
while(idx >= 0 || lastNum > 0) {
if(idx >= 0) {
lastNum += a[idx--];
}
// 取走末尾的数
list.add(lastNum % 10);
lastNum /= 10;
}
Collections.reverse(list);
return list;
}
}