暑期代码每日一练Day1:Leetcode415. 字符串相加
发布人:shili8
发布时间:2025-01-12 04:22
阅读次数:0
**暑期代码每日一练 Day1**
**题目描述**
给定两个字符串 `num1` 和 `num2`,它们代表整数的不同表示形式。请你返回这两个整数的和。
**注意**
- `num1` 和 `num2` 的长度小于或等于104。
- `num1` 和 `num2` 都是非空字符串。
- `num1` 和 `num2` 只包含数字 '0'-'9'。
- `num1` 和 `num2` 不含前导零。
**示例**
输入:`num1 = "123"`、`num2 = "456"`
输出:`"579"`
输入:`num1 = "0"`、`num2 = "0"`
输出:`"0"`
**解决方案**
我们可以使用栈来解决这个问题。首先,我们需要将两个数字转换为相反的顺序,以便从右边开始进行加法。
class Solution: def addStrings(self, num1: str, num2: str) -> str: # 将两个数字转换为相反的顺序 num1 = num1[::-1] num2 = num2[::-1] # 初始化栈和结果字符串 stack = [] result = "" # 进行加法 carry =0 i, j =0,0 while i < len(num1) or j < len(num2): n1 = int(num1[i]) if i < len(num1) else0 n2 = int(num2[j]) if j < len(num2) else0 # 计算和和进位 sum_ = n1 + n2 + carry result += str(sum_ %10) carry = sum_ //10 i +=1 j +=1 # 如果有剩余的进位,追加到结果中 if carry: result += str(carry) # 将结果反转并返回 return result[::-1]
**注释**
- 我们首先将两个数字转换为相反的顺序,以便从右边开始进行加法。
- 然后,我们初始化一个栈和一个结果字符串。
- 我们使用两个指针 `i` 和 `j` 来遍历两个数字。我们计算每对数字的和,并将其余数追加到结果中。如果有进位,我们更新进位值并继续下一对数字。
- 如果有剩余的进位,我们追加它到结果中。
- 最后,我们反转结果并返回。
**测试**
solution = Solution() print(solution.addStrings("123", "456")) # Output: "579" print(solution.addStrings("0", "0")) # Output: "0"
这将输出正确的结果。