415. 字符串相加

题目#

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

提示:

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

思路#

本题的难点(?)是如何在不将它们转换为数字的情况下达成每一「位」的相加。在此我们利用了 ASCII 码的特性,使用 byte 的减法得到真实数字。

代码#

func addStrings(num1 string, num2 string) string {
// 字符串转换为字符数组
nb1, nb2 := []byte(num1), []byte(num2)
// 确保 nb1 为较长的一个
if len(num2) > len(num1) {
nb1, nb2 = nb2, nb1
}
var (
l1 = len(nb1)
l2 = len(nb2)
i = l1 - 1
j = l2 - 1
sum uint8 = 0
)
for i >= 0 {
if j >= 0 {
// 此位上 nb2 的数字
sum += nb2[j] - '0'
j--
}
// 此位上 nb1 的数字
sum += nb1[i] - '0'
// 对 10 取余,获得该位的数字
nb1[i] = sum%10 + '0'
// 获取进位的数字
sum /= 10
i--
}
// 如果此时还有进位则加上该进位
if sum > 0 {
return "1" + string(nb1)
}
return string(nb1)
}

相关#

此题与前面的 2. 两数相加 很像。

Last updated on