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;
    }
    
    

All Problems

All Solutions