侧边栏壁纸
博主头像
GabrielxD

列車は必ず次の駅へ。では舞台は?私たちは?

  • 累计撰写 471 篇文章
  • 累计创建 108 个标签
  • 累计收到 9 条评论

目 录CONTENT

文章目录

【遍历, 模拟进位】字符串相加

GabrielxD
2022-04-22 / 0 评论 / 0 点赞 / 41 阅读 / 255 字 / 正在检测是否收录...
## 题目

415. 字符串相加


给定两个字符串形式的非负整数 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 <= 104
  • num1num2 都只包含数字 0-9
  • num1num2 都不包含任何前导零

解题

方法一:模拟进位

思路

模拟从低位加和,进位。

代码

class Solution {
    public String addStrings(String num1, String num2) {
        int idx1 = num1.length(), idx2 = num2.length();
        StringBuilder ans = new StringBuilder();
        int carry = 0;
        while(--idx1 >= 0 | --idx2 >= 0 || carry != 0) {
            int digit1 = idx1 >= 0 ? num1.charAt(idx1) - '0' : 0;
            int digit2 = idx2 >= 0 ? num2.charAt(idx2) - '0' : 0;
            int currDigit = carry + digit1 + digit2;
            carry = currDigit / 10;
            ans.append(currDigit % 10);
        }
        return ans.reverse().toString();
    }
}
0

评论区