思路:不论是几进制加法,方法都是从两个字符串的末尾开始遍历,将个位数加进 stringbuilder,若有进位则记录(供下次两字符相加时加上这个进位),最后再将 stringbuilder 反转。
技巧:不需要判断字符串的谁长谁短,只需要用 i、j(当前遍历字符的下标),当 i或 j 下标越界,即不满足>=0的时候(不再对该字符串进行操作即可:不加上字符串中的字符、不对 i、j 进行增减操作);
难度简单350
给定两个字符串形式的非负整数 num1 和num2 ,计算它们的和。
提示:
num1和num2的长度都小于 5100num1和num2都只包含数字0-9num1和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';
}
}
}
这篇博客探讨了如何在不使用内置库或直接转换字符串到整数的情况下,实现两个非负整数字符串的加法。提供了两种实现方式,一种是十进制加法,另一种是三十六进制加法。算法通过遍历字符串的逆序,逐位相加并处理进位,最终得到结果。
474

被折叠的 条评论
为什么被折叠?



