Add Strings

Given two non-negative integers num1 and num2 represented as string, return the sum of num1 and num2.
  • Note:
1. The length of both num1 and num2 is < 5100.

2. Both num1 and num2 contains only digits 0-9.

3. Both num1 and num2 does not contain any leading zero.

4. You must not use any built-in BigInteger library or convert the inputs to integer directly.
  • Analysis:
Set carry bit and sum bit. 

Iterate two string to get the added string.
  • Code - Java:
public class Solution {
    public String addStrings(String num1, String num2) {
        int len1 = num1.length();
        int len2 = num2.length();
        if (len1 > len2) {
            String temp = num1;
            num1 = num2;
            num2 = temp;
        }
        len1 = num1.length();
        len2 = num2.length();
        StringBuilder builder = new StringBuilder();
        int carry = 0;
        int j = len2 - 1;
        for (int i = len1 - 1; i >= 0; i--) {
            int a = num1.charAt(i) - '0';
            int b = num2.charAt(j) - '0';
            int sum = a + b + carry;
            carry = sum / 10;
            sum %= 10;
            builder.append(String.valueOf(sum));
            j--;
        }
        while (j >= 0) {
            int sum = carry + (num2.charAt(j) - '0');
            carry = sum / 10;
            sum %= 10;
            builder.append(String.valueOf(sum));
            j--;
        }
        if (carry == 1) {
            builder.append("1");
        }
        return builder.reverse().toString();
    }
}
  • Code - C++:
class Solution {
public:
    string addStrings(string num1, string num2) {
        int len1 = num1.length();
        int len2 = num2.length();
        if (len1 > len2) {
            string temp = num1;
            num1 = num2;
            num2 = temp;
        }
        len1 = num1.length();
        len2 = num2.length();
        string builder = "";
        int carry = 0;
        int j = len2 - 1;
        for (int i = len1 - 1; i >= 0; i--) {
            int a = num1[i] - '0';
            int b = num2[j] - '0';
            int sum = a + b + carry;
            carry = sum / 10;
            sum %= 10;
            builder += to_string(sum);
            j--;
        }
        while (j >= 0) {
            int sum = carry + (num2[j] - '0');
            carry = sum / 10;
            sum %= 10;
            builder += to_string(sum);
            j--;
        }
        if (carry == 1) {
            builder += "1";
        }
        reverse(builder.begin(), builder.end());
        return builder;
    }
};
  • Code - Python:
class Solution(object):
    def addStrings(self, num1, num2):
        """
        :type num1: str
        :type num2: str
        :rtype: str
        """
        len1, len2 = len(num1), len(num2)
        if len1 > len2:
            num1, num2 = num2, num1
            len1, len2 = len2, len1
        builder = ""
        carry, j = 0, len2 - 1
        for i in range(len1 - 1, -1, -1):
            a, b = ord(num1[i]) - ord('0'), ord(num2[j]) - ord('0')
            sumVal = a + b + carry
            carry = sumVal / 10
            sumVal %= 10
            builder += str(sumVal)
            j -= 1
        while j >= 0:
            sumVal = carry + ord(num2[j]) - ord('0')
            carry = sumVal / 10
            sumVal %= 10
            builder += str(sumVal)
            j -= 1
        if carry == 1:
            builder += str(1)
        return builder[::-1]
  • Time Complexity: O(M), M is max(len1, len2)

  • Space Complexity: O(M), M is max(len1, len2)

results matching ""

    No results matching ""