给定两个字符串形式的非负整数 num1
和num2
,计算它们的和并同样以字符串形式返回。
你不能使用任何內建的用于处理大整数的库(比如 BigInteger
), 也不能直接将输入的字符串转换为整数形式。
示例 1:
输入:num1 = "11", num2 = "123" 输出:"134"
示例 2:
输入:num1 = "456", num2 = "77" 输出:"533"
示例 3:
输入:num1 = "0", num2 = "0" 输出:"0"
提示:
1 <= num1.length, num2.length <= 104
num1
和num2
都只包含数字0-9
num1
和num2
都不包含任何前导零
思路:题目要求不能直接转换成整数进行运算,那样也失去了这道题的意义。所以这道题就是让我们模拟两个数的加法运算。
首先我们可以先处理一下这两个字符串,因为这两个字符串可能是不一样长的,我们可以对短的那个字符串添加前导0,让两个字符串等长,我们就省去了判断某个字符串已经遍历结束而另一个还没有结束的情况,当然不处理等到后面去判断也是一样的,我个人更喜欢做好处理再去进行下一步运算。
然后我们从后往前进行运算,相同位置的数相加,并且判断是否需要对前一位进行进位。
容易忽略的是最后一步,例如两个数是50和60,相加超过2位数了,最后还有一个进位,这时候我们需要在最前面添上一个1。
代码(Python):
class Solution(object):
def addStrings(self, num1, num2):
result = '' #保存结果
flag = 0 #保存是否进位
if len(num1) > len(num2): #给更短的字符串添加前导0
for i in range(len(num1) - len(num2)):
num2 = '0' + num2
else:
for i in range(len(num2) - len(num1)):
num1 = '0' + num1
index = len(num1) - 1 #下标,从后往前
while index >= 0:
num = ord(num1[index]) - ord('0') + ord(num2[index]) - ord('0')
print num
if num + flag >= 10: #若要进位
result += str(num + flag - 10)
flag = 1
else: #无需进位
result += str(num + flag)
flag = 0
index -= 1
if flag == 1: #若做完所有运算,还有一个进位
result += '1'
return result[::-1]