Check if all sub-numbers have distinct Digit product

Given a number N, the task is to check if the all sub-numbers of this number have distinct digit product.

Note:

  • An N digit number has N*(N+1)/2 sub-numbers. For example, all possible sub-numbers of 975 are 9, 7, 5, 97, 75, 975.
  • Digit product of a number is product of its digits.

Examples:



Input : N = 324
Output : YES
Sub-numbers of 324 are 3, 2, 4, 32, 24 and 324 
and digit products are 3, 2, 4, 6, 8 and 24 
respectively. All the digit products are different.

Input : N = 323
Output : NO
Sub-numbers of 323 are 3, 2, 3, 32, 23 and 323
and digit products are 3, 2, 3, 6, 6 and 18 
respectively. Digit products 3 and 6 have occurred 
twice. 

Approach :

  1. Make a digit array i.e., an array with its elements as digits of given number N.
  2. Now finding sub-numbers of N is similar to finding all possible subarrays of the digit array.
  3. Maintain a list of digit products of these subarrays.
  4. If any digit product has appeared more than once, print NO.
  5. Else print YES.

Below is the implementation of the above approach :

C++

filter_none

edit
close

play_arrow

link
brightness_4
code

// C++ program to check if all sub-numbers
// have distinct Digit product
#include<bits/stdc++.h>
using namespace std;
  
  
// Function to calculate product of
// digits between given indexes
int digitProduct(int digits[], int start, int end)
{
    int pro = 1;
    for (int i = start; i <= end; i++) {
        pro *= digits[i];
    }
    return pro;
}
  
// Function to check if all sub-numbers
// have distinct Digit product
bool isDistinct(int N)
{
    string s = to_string(N);
      
    // Length of number N
    int len = s.length();
  
    // Digit array
    int digits[len];
  
    // set to maintain digit products
    unordered_set<int> products;
  
    for (int i = 0; i < len; i++) {
        digits[i] = s[i]-'0';
    }
  
    // Finding all possible subarrays
    for (int i = 0; i < len; i++) {
        for (int j = i; j < len; j++) {
  
            int val = digitProduct(digits, i, j);
  
            if (products.find(val)!=products.end())
                return false;
            else
                products.insert(val);
        }
    }
  
    return true;
}
  
// Driver code
int main()
{
    int N = 324;
  
    if (isDistinct(N))
        cout << "YES";
    else
        cout << "NO";
          
    return 0;
}

chevron_right


Java

filter_none

edit
close

play_arrow

link
brightness_4
code

// Java program to check if all sub-numbers
// have distinct Digit product
import java.io.*;
import java.util.*;
  
public class GFG {
  
    // Function to calculate product of
    // digits between given indexes
    static int digitProduct(int[] digits, int start, int end)
    {
        int pro = 1;
        for (int i = start; i <= end; i++) {
            pro *= digits[i];
        }
        return pro;
    }
  
    // Function to check if all sub-numbers
    // have distinct Digit product
    static boolean isDistinct(int N)
    {
        String s = "" + N;
  
        // Length of number N
        int len = s.length();
  
        // Digit array
        int[] digits = new int[len];
  
        // List to maintain digit products
        ArrayList<Integer> products = new ArrayList<>();
  
        for (int i = 0; i < len; i++) {
            digits[i] = Integer.parseInt("" + s.charAt(i));
        }
  
        // Finding all possible subarrays
        for (int i = 0; i < len; i++) {
            for (int j = i; j < len; j++) {
  
                int val = digitProduct(digits, i, j);
  
                if (products.contains(val))
                    return false;
                else
                    products.add(val);
            }
        }
  
        return true;
    }
  
    // Driver code
    public static void main(String args[])
    {
        int N = 324;
  
        if (isDistinct(N))
            System.out.println("YES");
        else
            System.out.println("NO");
    }
}

chevron_right


Python3

filter_none

edit
close

play_arrow

link
brightness_4
code

# Python3 program to check if all 
# sub-numbers have distinct Digit product 
  
# Function to calculate product of 
# digits between given indexes 
def digitProduct(digits, start, end): 
  
    pro = 1
    for i in range(start, end + 1): 
        pro *= digits[i] 
      
    return pro 
  
# Function to check if all sub-numbers 
# have distinct Digit product 
def isDistinct(N): 
  
    s = str(N) 
      
    # Length of number N 
    length = len(s) 
  
    # Digit array 
    digits = [None] * length
  
    # set to maintain digit products 
    products = set()
  
    for i in range(0, length): 
        digits[i] = int(s[i])
      
    # Finding all possible subarrays 
    for i in range(0, length): 
        for j in range(i, length): 
  
            val = digitProduct(digits, i, j) 
      
            if val in products: 
                return False
            else:
                products.add(val) 
          
    return True
  
# Driver Code
if __name__ == "__main__"
  
    N = 324
  
    if isDistinct(N) == True
        print("YES"
    else:
        print("NO"
          
# This code is contributed 
# by Rituraj Jain

chevron_right


C#

filter_none

edit
close

play_arrow

link
brightness_4
code

// C# program to check if all sub-numbers
// have distinct Digit product
  
using System;
using System.Collections;
using System.Collections.Generic;
public class GFG {
  
    // Function to calculate product of
    // digits between given indexes
    static int digitProduct(int[] digits, int start, int end)
    {
        int pro = 1;
        for (int i = start; i <= end; i++) {
            pro *= digits[i];
        }
        return pro;
    }
  
    // Function to check if all sub-numbers
    // have distinct Digit product
    static bool isDistinct(int N)
    {
        string s = N.ToString();
  
        // Length of number N
        int len = s.Length;
  
        // Digit array
        int[] digits = new int[len];
  
        // List to maintain digit products
        ArrayList products = new ArrayList();
  
        for (int i = 0; i < len; i++) {
            digits[i] = s[i]-'0';
        }
  
        // Finding all possible subarrays
        for (int i = 0; i < len; i++) {
            for (int j = i; j < len; j++) {
  
                int val = digitProduct(digits, i, j);
  
                if (products.Contains(val))
                    return false;
                else
                    products.Add(val);
            }
        }
  
        return true;
    }
  
    // Driver code
    public static void Main()
    {
        int N = 324;
  
        if (isDistinct(N))
            Console.WriteLine("YES");
        else
            Console.WriteLine("NO");
    }
}
// This code is contributed by ihritik

chevron_right


PHP

filter_none

edit
close

play_arrow

link
brightness_4
code

<?PHP
// PHP program to check if all sub-numbers
// have distinct Digit product
  
// Function to calculate product of
// digits between given indexes
function digitProduct($digits, $start, $end)
{
    $pro = 1;
    for ($i = $start; $i <= $end; $i++) {
        $pro *= $digits[$i];
    }
    return $pro;
}
  
// Function to check if all sub-numbers
// have distinct Digit product
function isDistinct($N)
{
    $s ="$N";
      
    // Length of number N
    $len = sizeof($s);
  
    // Digit array
    $digits=array();
  
    //  to maintain digit products
    $products=array();
  
    for ($i = 0; $i < $len; $i++) {
        $digits[$i] = $s[$i]-'0';
    }
  
    // Finding all possible subarrays
    for ($i = 0; $i < $len; $i++) {
        for ($j = $i; $j < $len; $j++) {
  
            $val = digitProduct($digits, $i, $j);
  
            if (in_array($val,$products))
                return false;
            else
                array_push($products,$val);
        }
    }
  
    return true;
}
  
// Driver code
  
$N = 324;
  
if (isDistinct($N))
    echo "YES";
else
    echo "NO";
          
          
// This code is contributed by ihritik
          
?>

chevron_right


Output:

YES


My Personal Notes arrow_drop_up

Check out this Author's contributed articles.

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.



Improved By : ihritik, rituraj_jain, gp6



Article Tags :
Practice Tags :


Be the First to upvote.


Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.