思路:不论是几进制加法,方法都是从两个字符串的末尾开始遍历,将个位数加进 stringbuilder,若有进位则记录(供下次两字符相加时加上这个进位),最后再将 stringbuilder 反转。
技巧:不需要判断字符串的谁长谁短,只需要用 i、j(当前遍历字符的下标),当 i或 j 下标越界,即不满足>=0的时候(不再对该字符串进行操作即可:不加上字符串中的字符、不对 i、j 进行增减操作);
难度简单350
给定两个字符串形式的非负整数 num1
和num2
,计算它们的和。
提示:
num1
和num2
的长度都小于 5100num1
和num2
都只包含数字0-9
num1
和num2
都不包含任何前导零- 你不能使用任何內建 BigInteger 库, 也不能直接将输入的字符串转换为整数形式
class Solution {
public String addStrings(String num1, String num2) {
int i=num1.length()-1,j=num2.length()-1;
int flag=0;
StringBuilder sb=new StringBuilder();
while(i>=0||j>=0){
int sum=flag;
if(i>=0) sum+=num1.charAt(i--)-'0';
if(j>=0) sum+=num2.charAt(j--)-'0';
//sum+=flag;
sb.append(sum%10);
flag=sum/10;
}
if(flag==1) sb.append(1);
return sb.reverse().toString();
}
public String addStrings36(String num1, String num2) {
int i=num1.length()-1,j=num2.length()-1;
int flag=0;
StringBuilder sb=new StringBuilder();
while(i>=0||j>=0){
int sum=flag;
if(i>=0) sum+=getInt(charAt(i--));
if(j>=0) sum+=getInt(charAt(j--));
//sum+=flag;
sb.append(getChar(sum%36));
flag=sum/36;
}
if(flag==1) sb.append(1);
return sb.reverse().toString();
}
public int getInt(char c){
if(c<='9'&&c>='0'){
return c-'0';
}else{
return c-'a'+10;
}
}
public char getChar(int c){
if(c<=9){
return c+'0';
}else{
return c-10+'a';
}
}
}