theme: smartblue
持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第5天,点击查看活动详情
字符串相加
题目解析
题目难度:简单
题目素材解析
根据题目的描述来看,一共提供了三个参数素材:
字符串num1
字符串num2
注意:字符串num1、num2的长度在1到10000之间,而且这两个字符串开头不会为0。
我的解读
我对这道题目的解读,主要是放在了取字符串中每一位的值、相加进位处理这两点上。
因为这里面主要就是这两点比较费劲。
取字符串的值,目前主流的使用方法就是charAt方法,当然你也可以用substring,但是这个方法明显就耗费性能比较大。
相加进位,就是典型的数学知识了,需要一个中间位数来存储是否进位的标识。
解题思路
还是围绕上面的两点来解决问题。
第一步,先创建一个StringBuilder对象。
第二步,获取两个字符串的最大下标索引。
第三步,开始循环,循环体内判断两个下标索引是否符合要求。
第四步,相加后判断是否进位,将结果值存入StringBuilder对象中。
第五步,结束循环,判断最后一次计算是否存在进位。
第六步,利用StringBuilder的反转方法获得结果值。
代码
执行代码如下:
```java public class Test {
public static void main(String[] args) {
Test test = new Test();
System.out.println(test.addStrings("11","123"));
System.out.println(test.addStrings("456","77"));
System.out.println(test.addStrings("1","9"));
}
public String addStrings(String num1, String num2) {
StringBuilder result = new StringBuilder();
int n1l = num1.length() - 1;
int n2l = num2.length() - 1;
int z = 0;
while(n1l >= 0 || n2l >= 0){
int n1 = 0, n2 = 0;
if(n1l >= 0){
n1 = num1.charAt(n1l) - 48;
}
if(n2l >= 0){
n2 = num2.charAt(n2l) - 48;
}
if(n1 + n2 + z >= 10){
int r = n1 + n2 + z - 10;
result.append(r);
z = 1;
}else{
int r = n1 + n2 + z;
result.append(r);
z = 0;
}
n1l--;
n2l--;
}
if(z != 0){
result.append(z);
}
return result.reverse().toString();
}
} ```
执行结果
执行结果一般,推测是因为使用了StringBuilder的reverse方法导致的。
感觉这个反转方法性能耗费很大。
大家有兴趣可以自己试一下。