題目描述
思路
兩個(gè)方法
- 模擬豎式計(jì)算簸淀,逐位相加瓶蝴,注意進(jìn)位。
- 如果K加完了而A還沒(méi)加完
若有進(jìn)位則執(zhí)行去掉K的逐位加法租幕,直到無(wú)進(jìn)位或A也加完舷手,若無(wú)進(jìn)位,則直接將A添加到結(jié)果數(shù)組中劲绪。 - 如果A加完了而K還沒(méi)加完
將進(jìn)位加到K的剩余位上男窟,然后將K添加到結(jié)果數(shù)組中。 - 如果同時(shí)加完
若有進(jìn)位直接在結(jié)果數(shù)組中添加一位1
- 如果K加完了而A還沒(méi)加完
- 將A中的每個(gè)數(shù)加到K上
豎式計(jì)算
創(chuàng)建一個(gè)結(jié)果List贾富,將每一步的結(jié)果添加到該List的最末尾歉眷,最終將List翻轉(zhuǎn)(最終再翻轉(zhuǎn)相比較直接添加到末尾的方法更快)
代碼如下:
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.stream.Collectors;
class Solution {
public List<Integer> addToArrayForm(int[] A, int K) {
int length = A.length;
int last = 0;
int overflow = 0;
List<Integer> res = new ArrayList<>();
for (int i = length - 1; i >= 0; i--) {
last = K % 10;
K = K / 10;
int temp = A[i] + last + overflow;
res.add(temp % 10);
overflow = temp >= 10 ? 1 : 0;
if (K == 0) {
if (i == 0) {
if (overflow == 1) {
res.add(1);
overflow = 0;
}
} else {
for (int j = i - 1; j >= 0; j--) {
if (overflow == 0) {
List<Integer> listA = Arrays.stream(A).boxed().collect(Collectors.toList());
List<Integer> subListA = listA.subList(0, j + 1);
Collections.reverse(subListA);
res.addAll(subListA);
break;
}
temp = A[j] + overflow;
res.add(temp % 10);
overflow = temp >= 10 ? 1 : 0;
}
if (overflow == 1) {
res.add(1);
overflow = 0;
}
}
break;
}
}
while (K != 0) {
last = K % 10;
K = K / 10;
int temp = last + overflow;
res.add(temp % 10);
overflow = temp >= 10 ? 1 : 0;
}
if (overflow == 1) {
res.add(1);
}
Collections.reverse(res);
return res;
}
}
執(zhí)行用時(shí):14 ms, 在所有 Java 提交中擊敗了13.72%的用戶
內(nèi)存消耗:40.3 MB, 在所有 Java 提交中擊敗了28.82%的用戶
加到K上
代碼如下:
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
class Solution {
public List<Integer> addToArrayForm(int[] A, int K) {
int length = A.length;
List<Integer> res = new ArrayList<>();
for (int i = length - 1; i >= 0 || K > 0; i--) {
if (i >= 0) {
K = K + A[i];
}
res.add(K % 10);
K = K / 10;
}
Collections.reverse(res);
return res;
}
}
執(zhí)行用時(shí):5 ms, 在所有 Java 提交中擊敗了56.68%的用戶
內(nèi)存消耗:39.9 MB, 在所有 Java 提交中擊敗了46.10%的用戶