• 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。
    • 最后,将数组的元素反转,因为之前是倒着加的。如果不知道这个方法的话,就需要自己写一下。
  • 相关阅读:
    无线网破解软件|一键式破解无线网|BT17软件包下载[笔记本+软件就行]
    Boost环境配置及遇到的问题解决方案
    HDU 4255 A Famous Grid
    uva 10306
    系统学习Linux的11点建议
    linux shell except tcl login ssh Automatic interaction
    常用网址记录
    am335x Qt SocketCAN Demo hacking
    a demo for how to use QThread
    OK335xS CAN device register and deiver match hacking
  • 原文地址:https://www.cnblogs.com/Howfars/p/11508109.html
Copyright © 2020-2023  润新知