解题思路:
1.如果K==0,返回A即可
2.K!=0,将K转化为数组B
3.准备一个进位cn,初始值为0,当A和B都小于对应长度时:将数组对应位和进位相加,对10取余后就是对应位累加后的结果
同时更新cn=(数组对应位和进位相加)/10
4.如果A中还有元素未遍历到,则将A中的元素依次与cn相加,并更新cn的值为相加后对10取整,新元素的值为相加后对10取模
5.同理,如果B中海油元素未遍历到,则将B中的元素依次与cn相加,并更新cn的值为相加后对10取整,新元素的值为相加后对10取模
6.如果都遍历结束后,cn大于0,则把cn的值作为最后一个新元素的值
7.返回累加后的结果
代码实现:
class Solution {
public List<Integer> addToArrayForm(int[] A, int K) {
//数组模拟整数加法
List<Integer> list=new ArrayList<>();
if(K==0){
for(Integer val:A){
list.add(val);
}
return list;
}
List<Integer> B=new ArrayList<>();
//1.将K转化为数组
int cnt=0;//K的位数
while(K!=0){
B.add(K%10);
K/=10;
cnt++;
}
//2.数组对应位相加
int size=A.length;
int cn=0;//进位值
int i=0;
while(size>0&&i<cnt){
int cur=A[--size]+B.get(i++)+cn;
int val=cur%10;
list.add(val);
cn=cur/10;
}
//A中还有元素
while(size>0){
int val=A[--size]+cn;
list.add(val%10);
cn=val/10;
}
//B中还有元素
while(i<cnt){
int val=B.get(i++)+cn;
list.add(val%10);
cn=val/10;
}
if(cn>0){
list.add(cn);
}
Collections.reverse(list);
return list;
}
}