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