LeetCode Notes_#989 Add To Array-Form Integer(Java)

LeetCode Notes_#989 Add To Array-Form Integer(Java)

Contents

思路1:数组转换为数字再相加

先把输入的A数组转换为数字,然后加上K,取出结果中的每一位,组成一个List.代码如下:

class Solution {
    public List<Integer> addToArrayForm(int[] A, int K) {
        int num = 0;//最终应该是X+K这个数字
        ArrayList res = new ArrayList();
        System.out.print("A.length-1 = "+(A.length-1)+'
');
        for(int i = A.length-1;i >= 0;i--){ //遍历数组A,转化为int型
            num += A[i]*Math.pow(10,A.length-1-i);
            System.out.print("num = "+num+'
');
        }
        num += K;
        int digit = num%10;//代表遍历到的最新的一位数,如果是0,说明已经结束
        while(num != 0){
            digit = num%10;
            res.add(0,digit);//把最新的一位加到最前面
            num = num/10;
        }
        return res; 
    }
     public static void main(String[] args){
         int[] A = new int[]{1,2,0,0};
         Solution solution = new Solution();
         List<Integer> B = solution.addToArrayForm(A,34);
         for(int i = 0;i<=B.size()-1;i++){
             System.out.print(B.get(i));
         }
     }
}

遇到的问题

  • 发现对于大数会溢出,所以这种方法是不可行,无法通过的。
    达到int上限

被我忽略的题目限制
被我忽略的题目限制

思路2:按照每一位的顺序相加

代码如下

class Solution {
    public List<Integer> addToArrayForm(int[] A, int K) {
        int N = A.length;
        int cur = K;
        ArrayList<Integer> res = new ArrayList();
        int i = N;
        while(--i >= 0 || cur > 0){//意思是说只有cur==0&&i==0的时候才会停止,注意--放在前后是不一样的,放在后面的话,会多出一轮循环
            if(i >= 0)
                cur += A[i];
            res.add(cur%10);
            cur /= 10;    
        }
        
        Collections.reverse(res);
        return res;
        
    }
}

思路

  • K是一个数,A是一个数组,那么每次我从A中取出最后一个数与K相加,拿出最后一位,放入结果数组中;
  • 下一次抛弃掉K的最后一位,从A取出倒数第二个与K相加,拿出最后一位,放入结果数组;
  • ...依次类推,直到cur==0 且 i ==0的时候,循环结束,i == 0说明已经遍历到了A的第一个数字,cur == 0说明没有进位了,再运行一轮只会在前面加一个0。
  • 最后,将数组的元素反转,因为之前是倒着加的。如果不知道这个方法的话,就需要自己写一下。
原文地址:https://www.cnblogs.com/Howfars/p/11508109.html