One line slick solution:
return str(long(num1) * long(num2))
Run Time is 52 ms.
Normal solution: reverse two strings to make it more convenient, also care about carry. If use insert method to construct result, do not forget to remove '0's in the front.
Solution:
# T:O(m*n) S:O(m+n)
class Solution:
# @param num1, a string
# @param num2, a string
# @return a string
def multiply(self, num1, num2):
num1, num2 = num1[::-1], num2[::-1]
result = [0 for i in xrange(len(num1) + len(num2))]
for i in xrange(len(num1)):
for j in xrange(len(num2)):
result[i + j] += int(num1[i]) * int(num2[j])
carry, num3 = 0, []
for digit in result:
sum = carry + digit
carry = sum / 10
num3.insert(0, str(sum % 10))
while len(num3) > 1 and num3[0] == "0":
del num3[0]
return ''.join(num3)
Run Time: 368 ms
No comments:
Post a Comment