字符串相加
此博客链接:https://www.cnblogs.com/ping2yingshi/p/14013442.html
字符串相加
题目链接:https://leetcode-cn.com/problems/add-strings/
题目
给定两个字符串形式的非负整数 num1 和num2 ,计算它们的和。
提示:
num1 和num2 的长度都小于 5100
num1 和num2 都只包含数字 0-9
num1 和num2 都不包含任何前导零
你不能使用任何內建 BigInteger 库, 也不能直接将输入的字符串转换为整数形式
题解
思路:此题不让用现成的能使用的库或者整数相加,那么应该是,就使用字符串相加,去除每个字符串中的每个字符,变成数字后相加,这里需要注意到进位以及字符串相加时,应该是从后向前相加。
方法:
1.先把字符串变成字符数组。
2.取两个字符数组中的字符相加,相加时需要注意是否有进位。
3.相加的和存到一个字符串中。
4.把字符串翻转即为结果。
注意
这里需要注意的是,在取两个字符串相加时,首先需要判断哪个字符串段,先相加到断字符串的长度,然后把剩余字符串添加到后的后面。当添加剩余字符串时,也需要判断最后一次相加的结果是否大于10。
问题
一直没有找到怎么定义字符数组。
代码
以下代码字符数组哪里报错,但是我找了好久都没有找到怎么定义字符数组。
class Solution { public String addStrings(String num1, String num2) { int len1=num1.length(); int len2=num2.length(); char str1[len1]; char str2[len2]; for(int i=0;i<len1;i++) str1[i]=num1.charAt(i); for(int j=0;j<len1;j++) str1[j]=num2.charAt(j); int temp=0;//进位 int len3=len1<=len2?len1:len2; String sum; for(int i=len1-1;i>=0;i--) { sum.concat(String.valueOf(str1[i]+str2[j]+temp)); temp=(str1[i]+str2[j])>10?1:0; } //剩余字符串 if(len1<len2) { if(temp==1) { sum.concat(String.valueOf(str2[len1]+temp)); } else { sum.concat(String.valueOf(str2[len1])) ; } for(int i=len1+1;i<len2-len1;i++) { sum.concat(String.valueOf(str2[i])) ; } } else{ if(temp==1) { sum.concat(String.valueOf(str1[len1]+temp)); } else { sum.concat(String.valueOf(str1[len1])) ; } for(int i=len2+1;i<len1-len2;i++) { sum.concat(String.valueOf(str1[i])) ; } } //翻转字符串 int len3=sum.length(); char str3[len3]; for(int i=0;i<len3;i++) { str3[i]=str3.charAt(i); } for(int j=0;j<len3/2;j++) { char temp; temp=str3[j]; str3[j]=str3[len3-j-1]; str3[len3-j-1]=temp; } String str=""; for(int i=0;i<len3;i++) { str+=str3; } return str; } }
重做题目
说明
思路还是上面的思路,只是代码格式写的不太一样,但是还是报错。。。。。。
代码
class Solution { public String addStrings(String num1, String num2) { int len1=num1.length(); int len2=num2.length(); char[] str1=new char [len1]; char[] str2=new char [len2]; for(int i=0;i<len1;i++) str1[i]=num1.charAt(i); for(int j=0;j<len1;j++) str2[j]=num2.charAt(j); int temp=0;//进位 int len3=len1<=len2?len1:len2; String sum=""; int k=len1-1; int p=len2-1; while(k>=0||p>=0||temp!=0) sum=sum.concat(String.valueOf((str1[k]+0)+(str2[p]+0)+temp)); temp=(str1[i]+str2[i])>10?1:0; k--; p--; } //翻转字符串 char[] str3=sum.toCharArray(); // for(int i=0;i<len4;i++) // { // str3[i]=sum.charAt(i); // } int len4=str3.length; int len5=len4/2; for(int m=0;m<len4;m++) { char tem; tem=str3[m]; str3[m]=str3[len4-m-1]; str3[len4-m-1]=tem; } String str=""; for(int n=0;n<len5;n++) { str+=str3[n]; } // return sum.reverse().toString();//对字符串反转 return str; } }
结果
重新修改代码
class Solution { public String addStrings(String num1, String num2) { int len1=num1.length(); int len2=num2.length(); char[] str1=new char [len1]; char[] str2=new char [len2]; for(int i=0;i<len1;i++) str1[i]=num1.charAt(i); for(int j=0;j<len2;j++) str2[j]=num2.charAt(j); int temp=0;//进位 //int len3=len1<=len2?len1:len2; String sum= ""; int k=len1-1; int p=len2-1; int top = 0; int bottom = 0; while(k>=0||p>=0||temp!=0){ //if(k>=0&&p>=0) { if(k>=0){ top = (str1[k] - '0'); }else{ top = 0; } if(p>=0){ bottom = (str2[p] - '0'); }else{ bottom = 0; } int t= top + bottom + temp; // System.out.println("top:"+top); // System.out.println("bottom:"+bottom); // System.out.println("t:"+t); sum=sum.concat(String.valueOf( t%10 )); // //sum.add(t%10); // System.out.println("sum:"+sum); temp=Integer.valueOf(t)>=10?1:0; k--; p--; } /* if(p>=0&&k<0) { sum=sum.concat(String.valueOf((str2[p]+0)+temp)); temp=0; p--; } if(k>=0&&p<0) { sum=sum.concat(String.valueOf((str1[k]+0)+temp)); temp=0; k--; } */ } //翻转字符串 char[] str3=sum.toCharArray(); // for(int i=0;i<len4;i++) // { // str3[i]=sum.charAt(i); // } int len5=str3.length; int len4=len5; for(int m=0;m<len5/2;m++) { char tem; tem=str3[m]; str3[m]=str3[len4-m-1]; str3[len4-m-1]=tem; } String str=""; for(int n=0;n<len5;n++) { str+=str3[n]; } // return sum.reverse().toString();//对字符串反转 return str; } }
结果
出来混总是要还的