对于非负整数 X
而言,X
的数组形式是每位数字按从左到右的顺序形成的数组。例如,如果 X = 1231
,那么其数组形式为 [1,2,3,1]
。
给定非负整数 X
的数组形式 A
,返回整数 X+K
的数组形式。
示例 1:
输入:A = [1,2,0,0], K = 34 输出:[1,2,3,4] 解释:1200 + 34 = 1234
解释 2:
输入:A = [2,7,4], K = 181 输出:[4,5,5] 解释:274 + 181 = 455
示例 3:
输入:A = [2,1,5], K = 806 输出:[1,0,2,1] 解释:215 + 806 = 1021
示例 4:
输入:A = [9,9,9,9,9,9,9,9,9,9], K = 1 输出:[1,0,0,0,0,0,0,0,0,0,0] 解释:9999999999 + 1 = 10000000000
package LeetCode;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
/*
输入:A = [1,2,0,0], K = 34
输出:[1,2,3,4]
解释:1200 + 34 = 1234
解释 2:
输入:A = [2,7,4], K = 181
输出:[4,5,5]
解释:274 + 181 = 455
示例 3:
输入:A = [2,1,5], K = 806
输出:[1,0,2,1]
解释:215 + 806 = 1021
示例 4:
输入:A = [9,9,9,9,9,9,9,9,9,9], K = 1
输出:[1,0,0,0,0,0,0,0,0,0,0]
解释:9999999999 + 1 = 10000000000
*/
public class AddToArrayForm {
public List<Integer> addToArrayForm(int[] A, int K) {
String Ks = K + "";
char[] kl = Ks.toCharArray();
int maxlength = Math.max(A.length, kl.length);
int[] res = new int[maxlength + 1];
int min = Math.min(A.length, kl.length);
int i = 0;
//循环最高位数
while (i < maxlength) {
//当前i如果是小于最低位的那一个数组也就是得进行两个数组加在一起计算
if (i < min) {
//两个数组加在一起计算得到x
int x = res[res.length - 1 - i] + A[A.length - i - 1] + kl[kl.length - i - 1] - 48;
//判断是否需要进位
if (x >= 10) {
res[res.length - 1 - i] = x % 10;
res[res.length - i - 2] = x / 10;
} else {
res[res.length - 1 - i] = x;
}
} else {
//i大于最小位数了也就说不需要两个数组相加了需要一个数组判断是否能进行进位或者直接赋值
if (A.length > kl.length) {
res[res.length - 1 - i] += A[A.length - i - 1];
} else {
res[res.length - 1 - i] += kl[kl.length - i - 1] - 48;
}
if (res[res.length - 1 - i] >= 10) {
res[res.length - 2 - i] = res[res.length - 1 - i] / 10;
res[res.length - 1 - i] = res[res.length - 1 - i] % 10;
}
}
i++;
}
List<Integer> ress = new ArrayList();
if (res[0] != 0) {
ress.add(res[0]);
}
for (int j = 1; j < res.length; j++) {
ress.add(res[j]);
}
return ress;
}
public static void main(String[] args) {
AddToArrayForm a = new AddToArrayForm();
int[] m = {2,7,4};
a.addToArrayForm(m, 181);
}
}