力扣题解:415. 字符串相加

269 阅读1分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第13天,点击查看活动详情

一、题目描述:

415. 字符串相加 - 力扣(LeetCode)

给定两个字符串形式的非负整数 num1num2 ,计算它们的和并同样以字符串形式返回。

你不能使用任何內建的用于处理大整数的库(比如 BigInteger), 也不能直接将输入的字符串转换为整数形式。

 

示例 1:

输入:num1 = "11", num2 = "123"
输出:"134"

示例 2:

输入:num1 = "456", num2 = "77"
输出:"533"

示例 3:

输入:num1 = "0", num2 = "0"
输出:"0"

提示:

  • 1 <= num1.length, num2.length <= 10^4
  • num1 和num2 都只包含数字 0-9
  • num1 和num2 都不包含任何前导零

二、思路分析:

  1. 把字符串中的每个元素转换成对应的数字相加,但是要考虑进位问题,把每次相加的结果对10求余为相加结果加入到结果字符串sb中,对10求整为求进位。
  2. 最后把结果翻转输出即可。

三、AC 代码:

class Solution {
    public String addStrings(String num1, String num2) {
        int crray=0;//表示进位位
        int i=num1.length()-1;
        int j=num2.length()-1;
        StringBuilder sb=new StringBuilder();
        while(crray==1||i>=0||j>=0){
            int a=i<0?0:num1.charAt(i--)-'0';
            int b=j<0?0:num2.charAt(j--)-'0';
            sb.append((a+b+crray)%10);
            crray=(a+b+crray)/10;
        }
        return sb.reverse().toString();
    }
}

四、总结:

典型的双指针适合的题了~

直接模拟

对两个非负整数进行 竖式计算 的模拟即可
将相同数位对齐,从低到高逐位相加,如果当前位和超过 1010,则向高位进一位
双指针从数的末尾即最低位开始,逐位相加,记录进位到 add 变量中
较少位的那一个数就在前面补零

范文参考:

JavaScript 两字符串相加 逆向双指针(小学二年级都看得懂) - 字符串相加 - 力扣(LeetCode)

Java 手把手一句一句写代码 超过 99% 思路清晰 代码简洁 - 字符串相加 - 力扣(LeetCode) (leetcode-cn.com)