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

提示:

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

题解

创建2个指针 i, j 指向 num1 与 num2 的末端,分别逐位计算

计算的数字大于 10 则进位,储存在 carry 变量中

最后计算完后,如果 carry 大于 0 则 在进一位

  1. /**
  2. * @param {string} num1
  3. * @param {string} num2
  4. * @return {string}
  5. */
  6. var addStrings = function(num1, num2) {
  7. let i = num1.length - 1
  8. let j = num2.length - 1
  9. const len = Math.max(i, j)
  10. let carry = 0
  11. let res = ''
  12. for (let k = 0; k < len + 1; k++) {
  13. let n1 = num1[i] ? Number(num1[i]) : 0
  14. let n2 = num2[j] ? Number(num2[j]) : 0
  15. let num = n1 + n2 + carry
  16. if (num >= 10) {
  17. num -= 10
  18. carry = 1
  19. } else {
  20. carry = 0
  21. }
  22. res = `${num}${res}`
  23. i--
  24. j--
  25. }
  26. if (carry > 0) {
  27. res = `${carry}${res}`
  28. }
  29. return res
  30. };