Multiply Strings
LeetCode 43 | Difficulty: Mediumβ
MediumProblem Descriptionβ
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.
Topics: Math, String, Simulation
Approachβ
Mathematicalβ
Look for mathematical patterns or formulas. Consider: modular arithmetic, GCD/LCM, prime factorization, combinatorics, or geometric properties.
Problems with clear mathematical structure, counting, number properties.
String Processingβ
Consider character frequency counts, two-pointer approaches, or building strings efficiently. For pattern matching, think about KMP or rolling hash. For palindromes, expand from center or use DP.
Anagram detection, palindrome checking, string transformation, pattern matching.
Solutionsβ
Solution 1: C# (Best: 159 ms)β
| Metric | Value |
|---|---|
| Runtime | 159 ms |
| Memory | N/A |
| Date | 2017-10-29 |
public class Solution {
public string Multiply(string num1, string num2) {
int[] sum = new int[num1.Length + num2.Length];
for (int i = num1.Length-1; i>=0; i--)
{
int carry = 0;
for (int j = num2.Length-1; j>=0; j--)
{
int tmp = (sum[i + j + 1]) + (num1[i] - '0') * (num2[j] - '0') + carry;
sum[i + j + 1] = tmp%10;
carry = tmp / 10;
}
sum[i] += carry;
}
var result = string.Join("",sum).TrimStart('0');
return string.IsNullOrEmpty(result) ? "0" : result;
}
}
Complexity Analysisβ
| Approach | Time | Space |
|---|---|---|
| Solution | $O(n)$ | $O(1) to O(n)$ |
Interview Tipsβ
- Discuss the brute force approach first, then optimize. Explain your thought process.