天机阁

415. 字符串相加

2022-08-05 · 2 min read
LeetCode

题目

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

你不能使用任何內建的用于处理大整数的库(比如 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
  • num1 和num2 都只包含数字 0-9
  • num1 和num2 都不包含任何前导零

题解

如果相加的两个字符串 num1 = "124", num2 = "456",那么计算过程如下:

  1. 取两个数字最后一位相加,num1 最后一位为 "4",num2 最后一位为 "6";
  2. 将 "4" - '0' 转换成数字 4,同理, "6" - '0' 转换成数字 6;
  3. result = 4 + 6 = 10,有进位,使用变量 add = result/10 保存进位;
  4. 循环直到两个字符串数字遍历结束并且没有进位。

代码实现

func addStrings(num1, num2 string) string {
	i, j := len(num1)-1, len(num2)-1
	add := 0 // 进位
	ans := ""
	for ; i >= 0 || j >= 0 || add != 0; i, j = i-1, j-1 {
		x, y := 0, 0
		if i >= 0 {
			x = int(num1[i] - '0')
		}
		if j >= 0 {
			y = int(num2[j] - '0')
		}
		result := x + y + add
		ans = strconv.Itoa(result%10) + ans
		add = result / 10
	}
	return ans
}