当前位置:实例文章 » 其他实例» [文章]LeetCode 415. 字符串相加

LeetCode 415. 字符串相加

发布人:shili8 发布时间:2025-01-17 17:34 阅读次数:0

**字符串相加**
================给定两个以零开头的非负整数 `num1` 和 `num2`,请你它们的和。

注意:除了外部的前导零之外,不允许有任何其他前导零。

示例1:

输入: num1 = "123", num2 = "456"
输出: "579"

示例2:

输入: num1 = "0", num2 = "0"
输出: "0"

示例3:

输入: num1 = "1", num2 = "9"
输出: "10"

**解决方案**
------------我们可以使用一个栈来存储每个数字的和。从右边开始,我们将两个数字的最后一位数字相加,得到结果的最后一位数字。如果结果大于9,则需要进位。

class Solution:
 def addStrings(self, num1: str, num2: str) -> str:
 # 将字符串转换为列表,以便使用栈 stack1 = list(num1)
 stack2 = list(num2)

 # 初始化结果栈和进位变量 result_stack = []
 carry =0 # 从右边开始,将两个数字的最后一位数字相加,得到结果的最后一位数字 while stack1 or stack2 or carry:
 sum_val = carry if stack1:
 sum_val += int(stack1.pop())
 if stack2:
 sum_val += int(stack2.pop())

 # 将结果的最后一位数字压入栈中 result_stack.append(str(sum_val %10))
 carry = sum_val //10 # 将结果栈中的元素反转,得到最终结果 result = ''.join(reversed(result_stack))

 return result


**示例用法**
-------------

solution = Solution()
print(solution.addStrings("123", "456")) # 输出: "579"
print(solution.addStrings("0", "0")) # 输出: "0"
print(solution.addStrings("1", "9")) # 输出: "10"


**注意**
----

* 这个解决方案使用一个栈来存储每个数字的和,从右边开始将两个数字的最后一位数字相加,得到结果的最后一位数字。
* 如果结果大于9,则需要进位,将进位值添加到下一轮的计算中。
* 最终结果是通过反转栈中的元素得到的。

**时间复杂度**
--------------

* 时间复杂度为 O(max(n, m)),其中 n 和 m 是两个数字的长度。因为我们需要将两个数字的最后一位数字相加,直到没有进位值为止。
* 空间复杂度为 O(max(n, m)),因为我们需要一个栈来存储每个数字的和。

**总结**
--------

这个解决方案使用一个栈来存储每个数字的和,从右边开始将两个数字的最后一位数字相加,得到结果的最后一位数字。如果结果大于9,则需要进位,将进位值添加到下一轮的计算中。最终结果是通过反转栈中的元素得到的。

其他信息

其他资源

Top