Welcome to Subscribe On Youtube
3536. Maximum Product of Two Digits
Description
You are given a positive integer n
.
Return the maximum product of any two digits in n
.
Note: You may use the same digit twice if it appears more than once in n
.
Example 1:
Input: n = 31
Output: 3
Explanation:
- The digits of
n
are[3, 1]
. - The possible products of any two digits are:
3 * 1 = 3
. - The maximum product is 3.
Example 2:
Input: n = 22
Output: 4
Explanation:
- The digits of
n
are[2, 2]
. - The possible products of any two digits are:
2 * 2 = 4
. - The maximum product is 4.
Example 3:
Input: n = 124
Output: 8
Explanation:
- The digits of
n
are[1, 2, 4]
. - The possible products of any two digits are:
1 * 2 = 2
,1 * 4 = 4
,2 * 4 = 8
. - The maximum product is 8.
Constraints:
10 <= n <= 109
Solutions
Solution 1: Find the Largest and Second Largest Digits
We keep two variables, $a$ and $b$, to record the current largest and second‑largest digits, respectively. We iterate over every digit of $n$; if the current digit is larger than $a$, we assign $b$ the value of $a$ and then set $a$ to the current digit. Otherwise, if the current digit is larger than $b$, we set $b$ to the current digit. Finally, we return $a \times b$.
The time complexity is $O(\log n)$, where $n$ is the input number, and the space complexity is $O(1)$.
-
class Solution { public int maxProduct(int n) { int a = 0, b = 0; for (; n > 0; n /= 10) { int x = n % 10; if (a < x) { b = a; a = x; } else if (b < x) { b = x; } } return a * b; } }
-
class Solution { public: int maxProduct(int n) { int a = 0, b = 0; for (; n; n /= 10) { int x = n % 10; if (a < x) { b = a; a = x; } else if (b < x) { b = x; } } return a * b; } };
-
class Solution: def maxProduct(self, n: int) -> int: a = b = 0 while n: n, x = divmod(n, 10) if a < x: a, b = x, a elif b < x: b = x return a * b
-
func maxProduct(n int) int { a, b := 0, 0 for ; n > 0; n /= 10 { x := n % 10 if a < x { b, a = a, x } else if b < x { b = x } } return a * b }
-
function maxProduct(n: number): number { let [a, b] = [0, 0]; for (; n; n = Math.floor(n / 10)) { const x = n % 10; if (a < x) { [a, b] = [x, a]; } else if (b < x) { b = x; } } return a * b; }