zoukankan      html  css  js  c++  java
  • 数组形式的整数加法

    此博客链接: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;
        }
    }

    结果

    出来混总是要还的
  • 相关阅读:
    timeStamp(时间戳) 事件属性
    解析Javascript事件冒泡机制(转) 本文转自:http://blog.csdn.net/luanlouis/article/details/23927347
    stopPropagation()阻止事件的冒泡传递
    JavaScript for...in 循环
    js中的内置对象(还没怎么看)
    python 数组的切片
    python 文件的读写
    python 基础数据类型作业
    pycharm本地git拉代码使用方法
    数据库日常练习
  • 原文地址:https://www.cnblogs.com/ping2yingshi/p/14311268.html
Copyright © 2011-2022 走看看