两数相加
对照leecode两数相加:https://leetcode-cn.com/problems/add-two-numbers/
思路:
1、先把s和t转换成char数组,用i和j两个指针分别指向这两个char数组的尾部,然后从尾到头同时遍历(即从个位开始遍历),把当前位置两数以及进位count相加所得的数n(我自己定义为n方便后续计算)对10取余后加进stringbuilder中,同时计算新的进位count(count = n / 10)。
2、当其中一个char数组遍历完以后,继续遍历另一个数组,重复上述操作,不过此时的n=当前数组元素+count
3、最后还要检查一下count是否为1,如果是1则表明最后还会产生一个进位,要把这个进位也添加进去
4、把stringbuilder中的字符反转后再转换成string进行fan'h
代码如下:
import java.util.*;
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
* 计算两个数之和
* @param s string字符串 表示第一个整数
* @param t string字符串 表示第二个整数
* @return string字符串
*/
public String solve (String s, String t) {
// write code here
if(s == null || "".equals(s)){
return t;
}
if(t == null || "".equals(t)){
return s;
}
char[] schar = s.toCharArray();
char[] tchar = t.toCharArray();
int count = 0;
StringBuilder builder = new StringBuilder();
int i = schar.length - 1, j = tchar.length - 1;
//1、
while((i >= 0) && (j >= 0)){
int n = (schar[i] - '0') + (tchar[j] - '0') + count;
count = n / 10;
if(n >= 10){
n = n % 10;
}
builder.append(n);
i--;
j--;
}
//2、
while(i >= 0){
int n = (schar[i] - '0') + count;
count = n / 10;
if(n >= 10){
n = n % 10;
}
builder.append(n);
i--;
}
while(j >= 0){
int n = (tchar[j] - '0') + count;
count = n / 10;
if(n >= 10){
n = n % 10;
}
builder.append(n);
j--;
}
//3、
if(count == 1) builder.append(count);
//4、
return builder.reverse().toString();
}
}
