Description,
Given two non-negative integers num1 and num2 represented as string, return the sum of num1 and num2.
Note:
The length of both num1 and num2 is < 5100.
Both num1 and num2 contains only digits 0-9.
Both num1 and num2 does not contain any leading zero.
You must not use any built-in BigInteger library or convert the inputs to integer directly.
Strait-forward solution in Python
class Solution(object):
def addStrings(self, num1, num2):
"""
@runtime: 59ms
"""
num1 = list(num1)
num2 = list(num2)
ret = []
carry = 0
while num1 and num2:
a = ord(num1.pop()) - ord('0')
b = ord(num2.pop()) - ord('0')
c = (a+b+carry)%10
carry = (a+b+carry)/10
ret.append(c)
while num1:
if carry:
a = ord(num1.pop()) - ord('0')
c = (a+carry)%10
carry = (a+carry)/10
ret.append(c)
else:
ret.append(num1.pop())
while num2:
if carry:
b = ord(num2.pop()) - ord('0')
c = (b+carry)%10
carry = (b+carry)/10
ret.append(c)
else:
ret.append(num2.pop())
if carry:
ret.append(carry)
ret.reverse()
return ''.join(map(str, ret))
Runtime: 59ms
Concise solution in Java
public class Solution {
public String addStrings(String num1, String num2) {
StringBuilder sb = new StringBuilder();
int carry = 0;
for (int i=num1.length()-1, j=num2.length()-1; i>=0 || j>=0 || carry!=0; i--, j--) {
int I = i<0 ? 0 : num1.charAt(i)-'0';
int J = j<0 ? 0 : num2.charAt(j)-'0';
sb.append((I+J+carry)%10);
carry = (I+J+carry)/10;
}
return sb.reverse().toString();
}
}
Runtime: 24ms