题目的链接在这里https://leetcode-cn.com/problems/add-strings/
题目大意
给定两个字符串形式的非负整数 num1 和num2 ,计算它们的和。一、示意图
二、解题思路
错误代码
代码如下:
class Solution {
public String addStrings(String num1, String num2) {
//两个非负整数 计算他们的和
//好像写过类似的 但是不管怎么样 肯定是先从后往前开始判断的
//首先应该是一些边界判断 有一个是空的话 返回的就是另一个
if(num1==null)
return num2;
if(num2==null)
return num1;
//就是这里一步用来是num1一定是长一点的 不知道可不可行 因为String毕竟比较特殊
if(num2.length()>num1.length()){
//那就把这两个进行互换
String temp=num1;
num1=num2;
num2=temp;
}
int num1Len=num1.length();
int num2Len=num2.length();
int k=0;
//从后往前开始判断
for(int i=num1Len-1,j=num2Len-1;i>=0&&j>=0;i--,j--){
int x=num1.charAt(i)-'0';
int y=num2.charAt(j)-'0';
int sum=x+y;
//然后要进行一次判断
if(sum>=10){
sum%=10;
//这里是这样的 最好是判断出来哪个比较长 这样就把值给那个长的 感觉有点太绕了 这里还需要判断一下 这个i-1会
//会不会小于0了
if(i>0){
//重新赋值
int tempx=num1.charAt(i-1)-'0'+1;
if(tempx==10){
k=1;
}
//然后把这个新的位置设置成新的temp 但是String不提供 需要转换一下
StringBuilder sb=new StringBuilder(num1);
//[x,y)这样的
//也不知道这个可不可行
sb.replace(i-1,i,tempx+"");
//还得还原呀
//我感觉问题就在于 不用把这个替换的分开讨论 直接放在这个里面就行讨论就好了 他这边加号之后 9109 然后就可以继续加了
num1=sb.toString();
}
//然后就是i就是0 相当于就是需要在插入一个值了
else{
//重新用到StringBuilder
StringBuilder sb=new StringBuilder(num1);
sb.insert(0,'1');
num1=sb.toString();
}
//然后就是把这个sum进行替换了
StringBuilder sb=new StringBuilder(num1);
// System.out.println(i);
//还是这里的问题 正常就是i 到i+2的 除非是最后一个
//这里还有个特殊情况 就是出现前一个是9 加上1 之后变成了两位数
//把这个k作为一个标记好了
if(i==0||k==1){
sb.replace(i+1,i+2,sum+"");
}
else {
sb.replace(i, i + 1, sum + "");
}
num1=sb.toString();
}
else{
//这个就实际省事
StringBuilder sb=new StringBuilder(num1);
sb.replace(i,i+1,sum+"");
num1=sb.toString();
}
}
//然后因为之前已经判断好哪个长哪个短了 这个时候肯定是已经不用重新赋值了 num1就是最后结构
return num1;
}
}
进位标记
代码如下:
class Solution {
public static String addStrings(String num1, String num2) {
StringBuilder sb=new StringBuilder();
int len1=num1.length()-1;
int len2=num2.length()-1;
int index=0;//这个用来表示进位
while(len1>=0||len2>=0||index!=0){
//这个不等于0表示还有进位
if(len1>=0){
//len1--也就完成了更新
index+=num1.charAt(len1--)-'0';
}
if(len2>=0){
//len2--也就完成了更新
index+=num2.charAt(len2--)-'0';
}
//这个时候index就是两次的值了
sb.append(index%10);
//然后把index 太妙了
index/=10;
}
//这个时候生成的sb是倒转的 需要换一下
sb.reverse();
return sb.toString();
}
}