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,则需要进位,将进位值添加到下一轮的计算中。最终结果是通过反转栈中的元素得到的。