返回

LeetCode 手把手教你 Add Strings,轻松拿捏字符串加法!

IOS

引言

对于初学编程的同学来说,字符串处理往往令人头疼不已。今天,我们将通过 LeetCode 的一道简单题目 Add Strings,深入浅出地为你揭秘字符串加法的奥秘,让你轻松掌握这门必备技能。

题目

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

示例

输入:num1 = "11", num2 = "123"
输出:"134"

算法详解

字符串加法的核心在于将字符串中的数字逐位相加,就像我们小时候学习的竖式加法一样。为了便于理解,我们以示例中的 "11" 和 "123" 为例:

   1 1
+ 1 2 3
------
 1 3 4

具体步骤如下:

  1. 将 num1 和 num2 的字符串从后往前遍历。
  2. 对每个位置的字符,将其转换成整数(假设 '1' 对应 1,'2' 对应 2,以此类推)。
  3. 将两个整数相加,并记录和的个位数。
  4. 将和的十位数进位到下一位。
  5. 重复上述步骤,直到遍历完所有字符。
  6. 如果最后一位有进位,则在结果前面加上进位数。

代码实现

JavaScript:

const addStrings = (num1, num2) => {
  let carry = 0;
  let result = "";

  for (let i = num1.length - 1, j = num2.length - 1; i >= 0 || j >= 0; i--, j--) {
    const digit1 = parseInt(num1[i] || '0');
    const digit2 = parseInt(num2[j] || '0');
    const sum = digit1 + digit2 + carry;
    carry = Math.floor(sum / 10);
    result = (sum % 10) + result;
  }

  return carry > 0 ? carry + result : result;
};

Python:

def addStrings(num1, num2):
  carry = 0
  result = []

  i = len(num1) - 1
  j = len(num2) - 1
  while i >= 0 or j >= 0 or carry:
    digit1 = int(num1[i]) if i >= 0 else 0
    digit2 = int(num2[j]) if j >= 0 else 0
    sum = digit1 + digit2 + carry
    carry = sum // 10
    result.append(str(sum % 10))
    i -= 1
    j -= 1

  return ''.join(result[::-1])