美文网首页
String字符串表示的数字相加(LeetCode415.字符串

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

作者: 雁阵惊寒_zhn | 来源:发表于2020-10-25 11:46 被阅读0次

    题目

    给定两个字符串形式的非负整数 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.字符串

          本文链接:https://www.haomeiwen.com/subject/brlfmktx.html