Multiply Strings

Problem

https://leetcode.com/problems/multiply-strings/

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

Note: You must not use any built-in BigInteger library or convert the inputs to integer directly.

Example 1:

Input: num1 = "2", num2 = "3"
Output: "6"

Example 2:

Input: num1 = "123", num2 = "456"
Output: "56088"

Constraints:

  • 1 <= num1.length, num2.length <= 200

  • num1 and num2 consist of digits only.

  • Both num1 and num2 do not contain any leading zero, except the number 0 itself.

Pattern

Math, String

Approaches

Code

def multiply(num1: str, num2: str) -> str:
    """Multiply two numbers represented as strings."""
    if num1 == "0" or num2 == "0":
        return "0"

    n1 = len(num1)
    n2 = len(num2)
    result = [0] * (n1 + n2)

    for i in range(n1 - 1, -1, -1):
        for j in range(n2 - 1, -1, -1):
            mul = int(num1[i]) * int(num2[j])
            p1, p2 = i + j, i + j + 1
            total = mul + result[p2]
            result[p2] = total % 10
            result[p1] += total // 10

    start = 0
    while start < len(result) and result[start] == 0:
        start += 1

    return "".join(str(d) for d in result[start:])

Test

>>> from multiply_strings__grade_school import multiply
>>> multiply("2", "3")
'6'
>>> multiply("123", "456")
'56088'
>>> multiply("0", "0")
'0'
>>> multiply("999", "999")
'998001'
multiply_strings__grade_school.multiply(num1: str, num2: str) str

Multiply two numbers represented as strings.