题目是牛客网的题目
描述
以字符串的形式读入两个数字,编写一个函数计算它们的和,以字符串形式返回。
数据范围:len(s),len(t) \le 100000len(s),len(t)≤100000,字符串仅由’0’~‘9’构成
要求:时间复杂度 O(n)O(n)
例如输入:
“1”,“99”
返回值:
“100”
说明:1+99=100
解析
首先第一想法是biginteger直接暴力解决问题,但是看题目下面的第二个例子
输入:
“114514”,""
返回值:
“114514”
明白了,是要求用字符串进行函数运算,那么就好找切入点了。题目考察的是StringBuilder的用法,那么逻辑上就是找到字符串的最低位处的索引,然后进行进位的校验。最后将值转化为字符串类型返回。
package daShu;
public class daShuDemo {
public static String solve(String s, String t){
//获取字符串长度,从最低位开始进行取值
int i = s.length() - 1, j = t.length() - 1;
int temp = 0;
StringBuilder out = new StringBuilder();
//校验什么时间进入循环
while (i >= 0 || j >= 0 || temp != 0) {
//三目运算,将数字字符串转换为整形,常见用法 -'0'
//获取字符串s的第i位数值字符串 并将值赋给temp进行加法运算,第一次temp为0,之后每次循环结束,temp都将带着新的赋值返回进行加法运算
temp += i >= 0 ? s.charAt(i--) - '0' : 0;
temp += j >= 0 ? t.charAt(j--) - '0' : 0;
//将个位传出去
out.append(temp % 10);
//将十位保留
temp = temp / 10;
}
//将结果倒置
return out.reverse().toString();
}
}
写一个main方法测试一下
public static void main(String[] args) {
String r = solve("587","56089");
System.out.println(r);
}