此博客鏈接: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; } }
結果