当前位置:实例文章 » 其他实例» [文章]暑期代码每日一练Day1:Leetcode415. 字符串相加

暑期代码每日一练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"


这将输出正确的结果。

其他信息

其他资源

Top