LeetCode 0415. Add Strings Solution in Java, Python, C++, JavaScript, Go & Rust | Explanation + Code

CoderIndeed
0
0415. Add Strings

Description

Given two non-negative integers, num1 and num2 represented as string, return the sum of num1 and num2 as a string.

You must solve the problem without using any built-in library for handling large integers (such as BigInteger). You must also not convert the inputs to integers directly.

 

Example 1:

Input: num1 = "11", num2 = "123"
Output: "134"

Example 2:

Input: num1 = "456", num2 = "77"
Output: "533"

Example 3:

Input: num1 = "0", num2 = "0"
Output: "0"

 

Constraints:

  • 1 <= num1.length, num2.length <= 104
  • num1 and num2 consist of only digits.
  • num1 and num2 don't have any leading zeros except for the zero itself.

Solutions

Solution 1: Two Pointers

We use two pointers i and j to point to the end of the two strings respectively, and start adding bit by bit from the end. Each time we take out the corresponding digits a and b, calculate their sum a + b + c, where c represents the carry from the last addition. Finally, we append the units digit of a + b + c to the end of the answer string, and then take the tens digit of a + b + c as the value of the carry c, and loop this process until the pointers of both strings have pointed to the beginning of the string and the value of the carry c is 0.

Finally, reverse the answer string and return it.

The time complexity is O(max(m, n)), where m and n are the lengths of the two strings respectively. Ignoring the space consumption of the answer string, the space complexity is O(1).

The following code also implements string subtraction, refer to the subStrings(num1, num2) function.

PythonJavaC++GoTypeScriptRustJavaScriptKotlin
class Solution: def addStrings(self, num1: str, num2: str) -> str: i, j = len(num1) - 1, len(num2) - 1 ans = [] c = 0 while i >= 0 or j >= 0 or c: a = 0 if i < 0 else int(num1[i]) b = 0 if j < 0 else int(num2[j]) c, v = divmod(a + b + c, 10) ans.append(str(v)) i, j = i - 1, j - 1 return "".join(ans[::-1]) def subStrings(self, num1: str, num2: str) -> str: m, n = len(num1), len(num2) neg = m < n or (m == n and num1 < num2) if neg: num1, num2 = num2, num1 i, j = len(num1) - 1, len(num2) - 1 ans = [] c = 0 while i >= 0: c = int(num1[i]) - c - (0 if j < 0 else int(num2[j])) ans.append(str((c + 10) % 10)) c = 1 if c < 0 else 0 i, j = i - 1, j - 1 while len(ans) > 1 and ans[-1] == '0': ans.pop() if neg: ans.append('-') return ''.join(ans[::-1])(code-box)

Post a Comment

0Comments

Post a Comment (0)

#buttons=(Accept !) #days=(20)

Our website uses cookies to enhance your experience. Check Now
Accept !