leetcode989.数组形式的整数加法
题目链接:
https://leetcode-cn.com/problems/add-to-array-form-of-integer/
题目概述:
对于非负整数 X 而言,X 的数组形式是每位数字按从左到右的顺序形成的数组。例如,如果 X = 1231,那么其数组形式为 [1,2,3,1]。
给定非负整数 X 的数组形式 A,返回整数 X+K 的数组形式。
最容易想到的一种思路是把K转化为数组,然后两数组逐位相加。其实仔细想一下不必将K转化为数组,对K边处理边计算每一位的和即可。代码如下。
public class Problem989 {
//逐位相加
public List<Integer> addToArrayForm(int[] A, int K) {
List<Integer> ans = new ArrayList<>();
int len=A.length;
for (int i = len-1; i >=0 ; i--) {
int sum=A[i]+K%10; //边处理K边计算每位的和
K/=10;
if (sum>=10){ //和大于10发生进位,直接加在K上就好
sum-=10;
K++;
}
ans.add(sum);
}
while (K!=0){ //若K的长度大于数组A的长度,剩余的K各位的值直接添加在列表最后即可
ans.add(K%10);
K/=10;
}
Collections.reverse(ans); // 反转列表
return ans;
}
}
另一种方法是直接将K与数组A每位上的数字相加,每次将K加在数组A表示的数的最低位上。代码如下。
public class Problem989 {
//直接相加
public List<Integer> addToArrayForm1(int[] A, int K) {
List<Integer> res=new ArrayList<>();
int len=A.length;
for (int i=len-1;i>=0||K>0;i--,K/=10){
if (i>=0)
K+=A[i];
res.add(K%10);
}
Collections.reverse(res);
return res;
}
}
另外力扣上关于两数加法的模板
当前位 = (A 的当前位 + B 的当前位 + 进位carry) % 10
while ( A 没完 || B 没完))
A 的当前位
B 的当前位
和 = A 的当前位 + B 的当前位 + 进位carry
当前位 = 和 % 10;
进位 = 和 / 10;
判断是否还有进位

浙公网安备 33010602011771号