目录
大数加法
描述
以字符串的形式读入两个数字,编写一个函数计算它们的和,以字符串形式返回。
(字符串长度不大于100000,保证字符串仅由'0'~'9'这10种字符组成)
示例1
输入:
"1","99"
返回值:
"100"
说明:
1+99=100
方法:尾部相加
将低位依次相加,存储进位的信息
import java.util.*;
public class Solution {
public String solve (String s, String t) {
// write code here
StringBuffer res=new StringBuffer();
int i=s.length()-1,j=t.length()-1,carry=0,sum=0;
while(i>=0||j>=0||carry!=0){
int n1=i<0?0:s.charAt(i--)-'0';
int n2=j<0?0:t.charAt(j--)-'0';
sum=(n1+n2+carry)%10;
carry=(n1+n2+carry)/10;
res.append(sum);
}
return res.reverse().toString();
}
}
下面是运行的结果:
注意
这个题结果必须保存到 StringBuffer 或者 StringBuilder 中,最后转换为字符串,要不然时间就会超时,
因为在进行字符串拼接的时候,StringBuffer 或者 StringBuilder 要远比 String 的效率要高,因为 String 在执行字符串拼接的时候底层代码是创建 StringBuilder 对象然后调用 append 方法,
String str = "hello,world!";
String result = "";
result=result+str;
//底层代码
result = new StringBuilder(result).append(str).toString();
这样就导致每次拼接的时候都要 new 一个 StringBuilder 对象,并且还要将result的字符复制到新创建的 StringBuilder 对象中,当拼接的次数多了之后,时间效率自然就下来了,
而创建 StringBuilde r对象直接 append 拼接字符,就只用创建一次对象,后面都是调用 append 方法,时间消耗远远比直接字符串拼接要少,
由于 StringBuilder 相较于 StringBuffer 有速度优势,所以多数情况下建议使用 StringBuilder 类。然而在应用程序要求线程安全的情况下,则必须使用 StringBuffer 类