415. Add Strings 字符串相加

给定两个字符串形式的非负整数 num1 和num2 ,计算它们的和。

注意:

num1 和num2 的长度都小于 5100.
num1 和num2 都只包含数字 0-9.
num1 和num2 都不包含任何前导零。
你不能使用任何內建 BigInteger 库, 也不能直接将输入的字符串转换为整数形式。

模拟

感觉对Python来说这种加法没有意义,本身就能处理高精度问题,但还是写一写吧,引用一下之前写的C++高精度加法的内容:

输入两个数到两个变量中,然后用赋值语句求它们的和,输出。但是,我们知道,在C++语言中任何数据类型都有一定的表示范围。当两个被加数很大时,上述算法显然不能求出精确解,因此我们需要寻求另外一种方法。在读小学时,我们做加法都采用竖式方法,这样我们方便写出两个整数相加的算法。
an……a3 a2 a1
bn……b3 b2 b1
+————————
cn……c3 c2 c1

Code

class Solution:
	def addStrings(self, num1: str, num2: str) -> str:
		ans, len1, len2, carry = '', len(num1) - 1, len(num2) - 1, 0
		while len1 >= 0 and len2 >= 0:
			ans += str(((int(num1[len1]) + int(num2[len2]) + carry) % 10))
			carry = (int(num1[len1]) + int(num2[len2]) + carry) // 10
			len1 -= 1
			len2 -= 1
		while len1 >= 0:
			ans += str((int(num1[len1]) + carry) % 10)
			carry = (int(num1[len1]) + carry) // 10
			len1 -= 1
		while len2 >= 0:
			ans += str((int(num2[len2]) + carry) % 10)
			carry = (int(num2[len2]) + carry) // 10
			len2 -= 1
		if carry:
			ans += str(carry)
		return ans[::-1]

复杂度分析

时间复杂度:O(max(len1,len2)),其中 len1=num1.length,len2=num2.length。竖式加法的次数取决于较大数的位数。
空间复杂度:O(1)。除答案外我们只需要常数空间存放若干变量。

你可能感兴趣的:(#,LeetCode)