题目地址(415. 字符串相加)

https://leetcode-cn.com/problems/add-strings/

题目描述

  1. 给定两个字符串形式的非负整数 num1 num2 ,计算它们的和并同样以字符串形式返回。
  2. 你不能使用任何內建的用于处理大整数的库(比如 BigInteger), 也不能直接将输入的字符串转换为整数形式。
  3. 示例 1
  4. 输入:num1 = "11", num2 = "123"
  5. 输出:"134"
  6. 示例 2
  7. 输入:num1 = "456", num2 = "77"
  8. 输出:"533"
  9. 示例 3
  10. 输入:num1 = "0", num2 = "0"
  11. 输出:"0"
  12. 提示:
  13. 1 <= num1.length, num2.length <= 104
  14. num1 num2 都只包含数字 0-9
  15. num1 num2 都不包含任何前导零

前置知识


公司

  • 暂无

思路

image.png
当前位相加的数= num1.charAt + num2.charAt + 进位
进位=sum /10
然后把 个位也就是sun%10放到数组
最后如果有进位就再加个1
最后把sb反转

关键点


代码

  • 语言支持:Java

Java Code:

  1. class Solution {
  2. public String addStrings(String num1, String num2) {
  3. StringBuilder sb = new StringBuilder();
  4. int size1 = num1.length()-1;
  5. int size2 = num2.length()-1;
  6. int carry = 0;
  7. while (size1 >= 0 || size2 >= 0) {
  8. int sum1 = size1 >= 0 ? num1.charAt(size1) - '0' : 0;
  9. int sum2 = size2 >= 0 ? num2.charAt(size2) - '0' : 0;
  10. int sum = sum1 + sum2 + carry;
  11. carry = sum / 10;
  12. sb.append(sum % 10);
  13. size1--;
  14. size2--;
  15. }
  16. if (carry == 1) {
  17. sb.append(1);
  18. }
  19. return sb.reverse().toString();
  20. }
  21. }

复杂度分析

令 n 为数组长度。

  • 时间复杂度:415. 字符串相加 - 图2#card=math&code=O%28n%29&id=c5Smb)
  • 空间复杂度:415. 字符串相加 - 图3#card=math&code=O%28n%29&id=zrFlb)