String字符串表示的数字相加(LeetCode415.字符串相加)

题目

给定两个字符串形式的非负整数 num1 和num2 ,计算它们的和。
例如:"235" + "645" 结果为:"880","36" + "47" 结果为:"83"

解题

按照笔算加法的方式,相同数位对齐,依次进行加法,产生进位向前一位进位。如图:


笔算加法

从字符串的最高的下标对齐(字符串"abc",'a'的下标为0,'c'的下标是2,也就是两个字符串右对齐),依次向前遍历两个字符串到下标0的位置,如果其中一个字符串提前到下标0,那么之后遍历数位上都是0(相当于位数少的字符串高位用0补齐)。

代码

public String addStrings(String num1, String num2) {
    if(null == num1){
        return null;
    }
    if(null == num2){
        return null;
    }
    int i = 0;
    int carry = 0;
    //StringBuilder模拟栈结构把地位的结果放入栈底部,高位结果放入栈顶部
    StringBuilder sb = new StringBuilder();
    while(i < num1.length() || i < num2.length()){
        //从高下标开始,向0移动
        int m = i < num1.length() ? (num1.charAt(num1.length() - 1 - i) - '0') : 0;
        int n = i < num2.length() ? (num2.charAt(num2.length() - 1- i) - '0') : 0;
        //产生的进位值,初始化0
        int sum = m + n + carry;
        //保存结果,更新进位值
        sb.append(String.valueOf(sum % 10));
        carry = sum / 10;
        i++;
    }
    //最高位的进位单独处理
    if(carry > 0){
        sb.append(String.valueOf(carry));
    }
    //翻转StringBuilder获取结果
    return sb.reverse().toString();
}

你可能感兴趣的:(String字符串表示的数字相加(LeetCode415.字符串相加))