LeetCode:字符串相加【415】

LeetCode:字符串相加【415】

题目描述

给定两个字符串形式的非负整数 num1 和num2 ,计算它们的和。

注意:

num1 和num2 的长度都小于 5100.
num1 和num2 都只包含数字 0-9.
num1 和num2 都不包含任何前导零。
你不能使用任何內建 BigInteger 库, 也不能直接将输入的字符串转换为整数形式。

题目分析

  这道题其实很简单,我们要搞清楚手工计算两数之和的流程。两数相加,和如果大于10的话就有进位,进位最高为1,默认为0,该位相加的和应为sum%10

  小学数学题哦,不多解释了!

Java题解

    public static String addStrings(String num1, String num2) {
        int ptrNum1 = num1.length()-1 ;
        int ptrNum2 = num2.length()-1 ;
        int count = 0;
        StringBuilder result = new StringBuilder();
        //1、从两数个位开始相加
        while(ptrNum1>=0&&ptrNum2>=0){
            //[a、换算成数字]
            int a = num1.charAt(ptrNum1)-'0';
            int b = num2.charAt(ptrNum2)-'0';
            //[b、计算位数之和,包含进位count]
            int sum = a+b+count;
            count = 0;
            //[c、如果和大于9,则有新进位]
            if(sum>9){
                count =1;
                sum-=10;
            }
            //[d、将处理后sum插入结果]
            result.insert(0,sum);
            ptrNum1--;
            ptrNum2--;
        }
        //2、假如数字1还有高位未相加
        while(ptrNum1>=0){
            //[a、仅仅与进位值相加]
            int a =num1.charAt(ptrNum1)-'0'+count;
            count = 0;
            if(a>=10){
                count =1;
                a-=10;
            }
            //[b、将处理后sum插入结果]
            result.insert(0,a);
            ptrNum1--;
        }
        //3、加入数字2还有高位未相加
        while(ptrNum2>=0){
            int a =num2.charAt(ptrNum2)-'0'+count;
            count = 0;
            if(a>10){
                count =1;
                a-=10;
            }
            result.insert(0,a);
            ptrNum2--;
        }
        //4、考虑最高位进位的情况
        if(count==1)
            result.append("1");
        return result.toString();
    }

  

 

原文地址:https://www.cnblogs.com/MrSaver/p/11609516.html