数组形式的整数加法

此博客链接:https://www.cnblogs.com/ping2yingshi/p/14311268.html

数组形式的整数加法

题目链接:https://leetcode-cn.com/problems/add-to-array-form-of-integer/

题目

对于非负整数 X 而言,X 的数组形式是每位数字按从左到右的顺序形成的数组。例如,如果 X = 1231,那么其数组形式为 [1,2,3,1]。

给定非负整数 X 的数组形式 A,返回整数 X+K 的数组形式。

 

示例 1:

输入:A = [1,2,0,0], K = 34
输出:[1,2,3,4]
解释:1200 + 34 = 1234
示例 2:

输入:A = [2,7,4], K = 181
输出:[4,5,5]
解释:274 + 181 = 455
示例 3:

输入:A = [2,1,5], K = 806
输出:[1,0,2,1]
解释:215 + 806 = 1021
示例 4:

输入:A = [9,9,9,9,9,9,9,9,9,9], K = 1
输出:[1,0,0,0,0,0,0,0,0,0,0]
解释:9999999999 + 1 = 10000000000

题解

这里做的真郁闷,都做自闭了,做完过不了,才想起来,要是按照常理做,肯定超时啊,脑子也不知道怎么想的。这题思路是按位相加把加得的结果添加到字符串中,先从数组和K的最小位相加,直到其中一个数加完。然后把还没有加完的数前面的数添加到字符串中。

这里需要注意:

1.两个数相加会有进位。

2.加完的结果需要反转,因为加的时候是按照从小到大加的,结果是从大到小的顺序。

代码

class Solution {
    public List<Integer> addToArrayForm(int[] A, int K) {
        List <Integer> list=new ArrayList();
        String str=String.valueOf(K);
        char []num=str.toCharArray();
        int len=A.length-1;
        int temp=0;
        int i=num.length-1;
        String sum="";
        //求和
        while(len>=0||i>=0||temp!=0)
        {
            if(len>=0&&i>=0)
            {
                sum+=String.valueOf((((num[i]+0)+A[len]+temp)%10));
                temp=(num[i]+0+A[len]+temp)/10;
                len--;
                i--;
            }
            if(len>=0&&i<0)
            {
                if(temp>0)
                {
                    sum+=String.valueOf(((A[len]+temp)%10));
                    temp=(A[len]+temp)/10;
                }
                else
                   sum+=String.valueOf(A[len]);
                len--;
            }
             if(len<0&&i>=0)
            {
                if(temp>0)
                {
                    sum+=String.valueOf((num[i]+0+temp)%10);
                    temp=(num[i]+0+temp)/10;
                }
               else
                    sum+=String.valueOf(num[i]+0);
                i--;
            }
            if(len<0&&i<0&&temp>0)
            {
                sum+=String.valueOf(temp);
                temp--;
            }
                 

        }
        char []st=sum.toCharArray();
        //反转字符串
        for(int j=0;j<st.length/2;j++)
        {
               char tem=st[j];
               st[j]=st[st.length-1-j];
               st[st.length-1-j]=tem;
        }
        for(int m=0;m<st.length;m++)
        {
            list.add(Integer.valueOf(st[m]));
        }
        return list;
    }
}

 以上代码在最后把字符类型转换为整型时出了问题,使用Integer.valueOf(这里应该是字符串类型),把字符转换为整型减去'0'就可以了。

class Solution {
    public List<Integer> addToArrayForm(int[] A, int K) {
        List <Integer> list=new ArrayList();
        String str=String.valueOf(K);
        char []num=str.toCharArray();
        int len=A.length-1;
        int temp=0;
        int i=num.length-1;
        String sum="";
        //求和
        while(len>=0||i>=0||temp!=0)
        {
            if(len>=0&&i>=0)
            {
                sum+=String.valueOf((((num[i]-'0')+A[len]+temp)%10));
                temp=(num[i]-'0'+A[len]+temp)>=10?1:0;
                len--;
                i--;
            }
            if(len>=0&&i<0)
            {
                if(temp>0)
                {
                    sum+=String.valueOf(((A[len]+temp)%10));
                    temp=(A[len]+temp)>=10?1:0;
                }
                else
                   sum+=String.valueOf(A[len]);
                len--;
            }
             if(len<0&&i>=0)
            {
                if(temp>0)
                {
                    sum+=String.valueOf((num[i]-'0'+temp)%10);
                    temp=(num[i]-'0'+temp)>=10?1:0;
                }
               else
                    sum+=String.valueOf(num[i]-'0');
                i--;
            }
            if(len<0&&i<0&&temp>0)
            {
                sum+=String.valueOf(temp);
                temp=0;
            }
              //System.out.println(sum);
               //System.out.println(temp);    

        }
        char []st=sum.toCharArray();
        //反转字符串
        for(int j=0;j<st.length/2;j++)
        {
              // System.out.println(st[j]);
               //System.out.println(st[st.length-1-j]);  
               char tem=st[j];
               st[j]=st[st.length-1-j];
               st[st.length-1-j]=tem;
        }
        for(int m=0;m<st.length;m++)
        {
            //System.out.println(st[m]); 
            //System.out.println(st[m]-'0'); 
           // list.add(Integer.valueOf(st[m]));
            list.add(st[m]-'0');
        }
        return list;
    }
}

 

结果

 

posted @ 2021-01-22 00:35  萍2樱释  阅读(149)  评论(1编辑  收藏  举报