Skip to main content

Leetcode 43: Multiply Strings


1. Problem Statement (Simple Explanation):


You’re given two non-negative integers num1 and num2 as strings.

You must:

  • Return their product as a string.

  • You cannot:

    • Use built-in big integer libraries.

    • Convert the entire strings directly to integers.

Lengths:

  • 1 <= len(num1), len(num2) <= 200

  • Digits only, no leading zero except "0" itself.


2. Examples:


Example 1:

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

2 * 3 = 6

Output: "6"


Example 2:

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

123 * 456 = 56088

Output: "56088"


3. Intuition – Simulate Grade-School Multiplication:


We multiply like on paper:

For num1 = "123", num2 = "456":

   1 2 3

x    4 5 6

---------

     7 3 8   (123 * 6, shifted by 0)

   6 1 5     (123 * 5, shifted by 1)

 4 9 2       (123 * 4, shifted by 2)

---------

 5 6 0 8 8

But instead of summing separate rows, we can directly use indexing into an array of size m + n, where m = len(num1), n = len(num2).


Indexing Trick:


Let:

  • i index in num1 from right to left (least significant digit).

  • j index in num2 from right to left.

If:

  • num1[i] contributes a = digit(num1[i])

  • num2[j] contributes b = digit(num2[j])

Then:

  • The product a * b contributes to positions:


p1 = i + j

p2 = i + j + 1

in a result array of length m + n.

We accumulate multiplication and carry:


sum = a*b + result[p2]

result[p2] = sum % 10

result[p1] += sum / 10

At the end, result holds digits (possibly with leading zeros), and we build the string skipping leading zeros.


4. Algorithm (Step-by-Step):


  1. If either num1 == "0" or num2 == "0", return "0".

  2. Let:

m = len(num1)

n = len(num2)

result = int array of size m + n, initialized to 0

  1. Loop over digits from right to left:

for i from m-1 down to 0:

    for j from n-1 down to 0:

        a = num1[i] - '0'

        b = num2[j] - '0'

        mul = a * b

        p1 = i + j

        p2 = i + j + 1


        sum = mul + result[p2]


        result[p2] = sum % 10

        result[p1] += sum / 10

  1. Convert result array to string:

    • Skip leading zeros.

    • Append digits to a builder.

  2. If after skipping zeros, the string is empty → return "0", otherwise return the built string.


Pseudo-code:



Complexity:


Let:

  • M = |num1|, n = |num2|

Then:

  • Time: O(m*n) – nested loops.

  • Space: O(m + n) for the result array.

Given m, n <= 200, this is efficient.


5. Java code:



6. C code:



7. C++ code:



8. Python code:



9. JavaScript code:


Comments

Popular posts from this blog

Leetcode 1: Two Sum

  Leetcode Link: https://leetcode.com/problems/two-sum/ 1. Problem Statement (Simple Explanation) You are given: An array of integers nums An integer target You need to  return the indices of two numbers in the array  such that: Conditions: Each input has  exactly one solution . You  cannot use the same element twice . You can return the answer in  any order . 2. Examples Example 1 Input:                                    nums = [2, 7, 11, 15], target = 9 Output:                                 [0, 1] Explanation:                     nums[0]+nums[1]=2+7=9              So we return [0, 1]. Example 2 Input:           ...

Leetcode 3: Longest Substring Without Repeating Characters

  Leetcode Link 1. Problem Statement (Simple Explanation) You are given a string s. You need to find the length of the longest substring of s that does not  contain any repeated characters. A substring is a contiguous sequence of characters in the string. You must return an integer length, not the substring itself. 2. Examples Example 1 Input: s = "abcabcbb" Output: 3 Explanation: Some substrings without repeating characters: "abc", "bca", "cab"The longest length is 3. Example 2 Input: s = "bbbbb" Output: 1 Explanation: All substrings that are valid are just "b". The longest length is 1. Example 3 Input:   s = "pwwkew" Output:   3 Explanation: Possible substrings without repetition: "pw", "wke", "kew". "wke" or "kew" have length 3. "pwke" is not valid because it’s not contiguous in the original string (p and k are separated by ww). Constraints...

Leetcode 2: Add Two Numbers

Leetcode Link: https://leetcode.com/problems/add-two-numbers/ 1. Problem Statement (Simple Explanation) You are given  two non-empty linked lists , l1 and l2, that represent two non-negative integers. Each node contains a  single digit . The digits are stored in  reverse order  (i.e., the 1’s digit is at the head). You need to  add the two numbers  and return the  sum as a linked list , also in reverse order. You can assume: There are  no leading zeros , except when the number itself is 0. 2. Examples Example 1 Input:                l1 = [2,4,3]                l2 = [5,6,4]           Interpreting linked lists as numbers (reverse order): l1 represents 342 l2 represents 465 Output:                [7,0,8] Explanation:        ...