本文内容包含自己一些学习算法和数据结构的一些方法,如有不对,请大佬指出,谢谢!!
leetcode第415题:
从我看到本题开始,一看是简单题,并且不准让字符串直接转换成整型,那么只好让两个数字每位相加,每一次计算的结果除10,就是真正的结果,然后放在结果中,如果有进位的话,那么add的结果就是1,反之则是0。
第二个问题是,他们两个字符串不一定是相同长度的,例如:String a=“123456789” String b=“123456” 那么他们相加是这样的
1 2 3 4 5 6 7 8 9
1 2 3 4 5 6
我的想法是 如果前面位数不足那么用0代替!
1 2 3 4 5 6 7 8 9
0 0 0 1 2 3 4 5 6
那么这样就是正确的加法结果,再代码中还有许多需要改进的地方,没有做极端测试,例如,一个数非常大,一个数非常小,就会造成,一些奇怪的结果。。。
最后代码如下:
public String addStrings(String num1, String num2) {
int i=num1.length()-1;
int j=num2.length()-1;
int add=0;
StringBuffer ans=new StringBuffer();
while(i>=0||j>=0||add!=0){
String x1="";
String y1="";
int x=0;
int y=0;
if(i<0){
x=0;
}else{
x1=num1.charAt(i)+"";
x=Integer.parseInt(x1);
}
if(j<0){
y=0;
}else{
y1=num2.charAt(j)+"";
y=Integer.parseInt(y1);
}
int result=x+y+add;
ans.append(result % 10);
add=result/10;
i--;
j--;
}
ans.reverse();
return ans.toString();
}
中间写的非常繁琐,使用Stringbuffer,在java的String方法中,找不到反转字符串的方法。。。。
为什么最后要反转,例如 1234 +1234 而
i和j初值是最大长度,也就是1234中的4,才有进位,那么结果中最先放入的值是第一位运算的结果,但是正常的加法第一位运算的结果是放在最后一位的,所以要反转最后的结果!!
感谢阅读!!!谢谢!!