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号
浙公网安备 33010602011771号