Open In App

Numbers having Unique (or Distinct) digits

Improve
Improve
Like Article
Like
Save
Share
Report

Given a range, print all numbers having unique digits. 

Examples : 

Input : 10 20
Output : 10 12 13 14 15 16 17 18 19 20 (Except 11)
Input : 1 10
Output : 1 2 3 4 5 6 7 8 9 10
Recommended Practice

Approach:

As the problem is pretty simple, the only thing to be done is :-
1- Find the digits one by one and keep marking visited digits.
2- If all digits occurs one time only then print that number.
3- Else not.

Implementation:

C++14




#include <array>
#include <iostream>
 
// Method to print unique digit numbers
// in the range from l to r.
void printUnique(int l, int r)
{
    // Start traversing the numbers
    for (int i = l; i <= r; ++i) {
        int num = i;
        std::array<bool, 10> visited = { false };
 
        // Find digits and maintain its hash
        while (num != 0) {
            // If a digit occurs more than 1 time
            // then break
            if (visited[num % 10])
                break;
 
            visited[num % 10] = true;
 
            num = num / 10;
        }
 
        // num will be 0 only when the above loop
        // doesn't get broken, that means the
        // number is unique, so print it.
        if (num == 0)
            std::cout << i << " ";
    }
}
 
// Driver method
int main()
{
    int l = 1, r = 20;
    printUnique(l, r);
 
    return 0;
}


C++




// C++ implementation to find unique digit
// numbers in a range
#include<bits/stdc++.h>
using namespace std;
 
// Function to print unique digit numbers
// in range from l to r.
void printUnique(int l, int r)
{
    // Start traversing the numbers
    for (int i=l ; i<=r ; i++)
    {
        int num = i;
        bool visited[10] = {false};
 
        // Find digits and maintain its hash
        while (num)
        {
            // if a digit occurs more than 1 time
            // then break
            if (visited[num % 10])
                break;
 
            visited[num%10] = true;
 
            num = num/10;
        }
 
        // num will be 0 only when above loop
        // doesn't get break that means the
        // number is unique so print it.
        if (num == 0)
            cout << i << " ";
    }
}
 
// Driver code
int main()
{
    int l = 1, r = 20;
    printUnique(l, r);
    return 0;
}


Java




public class UniqueDigitNumbers {
    // Method to print unique digit numbers
    // in the range from l to r.
    static void printUnique(int l, int r) {
        // Start traversing the numbers
        for (int i = l; i <= r; ++i) {
            int num = i;
            boolean[] visited = new boolean[10];
 
            // Find digits and maintain its hash
            while (num != 0) {
                // If a digit occurs more than 1 time
                // then break
                if (visited[num % 10]) {
                    break;
                }
 
                visited[num % 10] = true;
 
                num = num / 10;
            }
 
            // num will be 0 only when the above loop
            // doesn't get broken, that means the
            // number is unique, so print it.
            if (num == 0) {
                System.out.print(i + " ");
            }
        }
    }
 
    // Driver method
    public static void main(String[] args) {
        int l = 1, r = 20;
        printUnique(l, r);
    }
}


Python3




# Python3 implementation
# to find unique digit
# numbers in a range
 
# Function to print
# unique digit numbers
# in range from l to r.
def printUnique(l,r):
     
    # Start traversing
    # the numbers
    for i in range (l, r + 1):
        num = i;
        visited = [0,0,0,0,0,0,0,0,0,0];
         
        # Find digits and
        # maintain its hash
        while (num):
             
            # if a digit occurs
            # more than 1 time
            # then break
            if visited[num % 10] == 1:
                break;
            visited[num % 10] = 1;
            num = (int)(num / 10);
             
        # num will be 0 only when
        # above loop doesn't get
        # break that means the
        # number is unique so
        # print it.
        if num == 0:
            print(i, end = " ");
 
# Driver code
l = 1;
r = 20;
printUnique(l, r);
 
# This code is
# contributed by mits


C#




// C# implementation to find unique digit
// numbers in a range
using System;
         
public class GFG {
     
    // Method to print unique digit numbers
    // in range from l to r.
    static void printUnique(int l, int r)
    {
         
        // Start traversing the numbers
        for (int i = l ; i <= r ; i++)
        {
            int num = i;
            bool []visited = new bool[10];
     
            // Find digits and maintain
            // its hash
            while (num != 0)
            {
                 
                // if a digit occurs more
                // than 1 time then break
                if (visited[num % 10])
                    break;
     
                visited[num % 10] = true;
     
                num = num / 10;
            }
     
            // num will be 0 only when
            // above loop doesn't get
            // break that means the number
            // is unique so print it.
            if (num == 0)
                Console.Write(i + " ");
        }
    }
     
    // Driver method
    public static void Main()
    {
        int l = 1, r = 20;
        printUnique(l, r);
    }
}
 
// This code is contributed by Sam007.


Javascript




<script>
 
// Javascript implementation to find unique digit
// numbers in a range
 
// Function to print unique digit numbers
// in range from l to r.
function printUnique(l, r)
{
    // Start traversing the numbers
    for (let i=l ; i<=r ; i++)
    {
        let num = i;
        let visited = new Array(10);
 
        // Find digits and maintain its hash
        while (num)
        {
            // if a digit occurs more than 1 time
            // then break
            if (visited[num % 10])
                break;
 
            visited[num%10] = true;
 
            num = Math.floor(num/10);
        }
 
        // num will be 0 only when above loop
        // doesn't get break that means the
        // number is unique so print it.
        if (num == 0)
            document.write(i + " ");
    }
}
 
// Driver code
 
    let l = 1, r = 20;
    printUnique(l, r);
     
// This code is contributed by Mayank Tyagi
 
</script>


PHP




<?php
// PHP implementation to find unique
// digit numbers in a range
 
// Function to print unique digit
// numbers in range from l to r.
function printUnique($l, $r)
{
    // Start traversing the numbers
    for ($i = $l ; $i <= $r; $i++)
    {
        $num = $i;
        $visited = (false);
 
        // Find digits and
        // maintain its hash
        while ($num)
        {
            // if a digit occurs more
            // than 1 time then break
            if ($visited[$num % 10])
             
            $visited[$num % 10] = true;
 
            $num = (int)$num / 10;
        }
 
        // num will be 0 only when above
        // loop doesn't get break that
        // means the number is unique
        // so print it.
        if ($num == 0)
            echo $i , " ";
    }
}
 
// Driver code
$l = 1; $r = 20;
printUnique($l, $r);
 
// This code is contributed by aj_36
?>


Output

1 2 3 4 5 6 7 8 9 10 12 13 14 15 16 17 18 19 20 




Time Complexity : O(nlogn)
Auxiliary Space: O(1)

Another Approach: Use set STL for C++ and Java Collections for Java in order to check if a number has only unique digits. Then we can compare the size of string s formed from a given number and newly created set. For example, let us consider the number 1987, then we can convert the number into the string,

Implementation:

C++




int n;
cin>>n;
string s = to_string(n);


Java




//creating scanner class object for taking user input
Scanner sc = new Scanner(System.in);
 
int n=sc.nextInt();
 
//converting the number to string using String.valueof(number);
string s = String.valueof(n);


Python3




n = int(input())
s = str(n)


C#




int n = Convert.ToInt32(Console.ReadLine());
 
// converting the number to string using
// String.valueof(number);
string s = Convert.ToString(n);


Javascript




let n;
let s= String(n);


After that, initialize a set with the contents of string s.

C++




set<int> uniDigits(s.begin(), s.end());


Java




HashSet<Integer> uniDigits = new HashSet<Integer>();
for(int i:s.tocharArray())
{
    uniDigits.add(i);
}


Python3




uniDigits = set(s)


C#




var uniDigits = new HashSet<char>(s.ToCharArray());


Javascript




let uniDigits = new Set();


Then we can compare the size of string s and newly created set uniDigits.

Here is the code for the above approach:

C++14




#include <iostream>
#include <unordered_set>
 
// Function to print unique numbers
void printUnique(int l, int r) {
    // Iterate from l to r
    for (int i = l; i <= r; ++i) {
        // Convert the number to a string
        std::string s = std::to_string(i);
 
        // Convert String to set using C++ unordered_set
        std::unordered_set<char> uniDigits(s.begin(), s.end());
 
        // Output if condition satisfies
        if (s.length() == uniDigits.size()) {
            std::cout << i << " ";
        }
    }
}
 
// Driver Code
int main() {
    // Input of the lower and higher limits
    int l = 1, r = 20;
 
    // Function Call
    printUnique(l, r);
 
    return 0;
}


C++




// C++ code for the above approach
#include <bits/stdc++.h>
using namespace std;
 
// Function to print unique
// numbers
void printUnique(int l, int r){
   
  // Iterate from l to r
  for (int i = l; i <= r; i++) {
       
        // Convert the no. to
        // string
        string s = to_string(i);
       
        // Convert string to set using stl
        set<int> uniDigits(s.begin(), s.end());
       
        // Output if condition satisfies
        if (s.size() == uniDigits.size()) {
            cout << i << " ";
        }
    }
}
 
// Driver Code
int main()
{
   
    // Input of the lower and
    // higher limits
    int l = 1, r = 20;
     
    // Function Call
    printUnique(l, r);
    return 0;
}


Java




// Java code for the above approach
import java.io.*;
 
class GFG{
 
// Function to print unique
// numbers
static void printUnique(int l, int r)
{
     
    // Iterate from l to r
    for(int i = l; i <= r; i++)
    {
         
        // Convert the no. to
        // String
        String s = String.valueOf(i);
       
        // Convert String to set using Java Collections
        HashSet<Integer> uniDigits = new HashSet<Integer>();
        for(int c : s.toCharArray())
            uniDigits.add(c);
             
        // Output if condition satisfies
        if (s.length() == uniDigits.size())
        {
            System.out.print(i+ " ");
        }
    }
}
 
// Driver Code
public static void main(String[] args)
{
   
    // Input of the lower and
    // higher limits
    int l = 1, r = 20;
     
    // Function Call
    printUnique(l, r);
}
}
 
// This code is contributed by Princi Singh


Python3




# Function to print unique
# numbers
def print_unique(l, r):
 
    # Iterate from l to r
    for i in range(l, r + 1):
 
        # Convert the no. to
        # string
        s = str(i)
 
        # Convert string to set
        uni_digits = set(s)
 
        # Output if condition satisfies
        if len(s) == len(uni_digits):
            print(i, end=" ")
 
# Driver Code
 
# Input of the lower and
# higher limits
l = 1
r = 20
 
# Function Call
print_unique(l, r)


C#




// C# code for the above approach
using System;
using System.Collections.Generic;
 
class GFG{
 
// Function to print unique
// numbers
static void printUnique(int l, int r)
{
     
    // Iterate from l to r
    for(int i = l; i <= r; i++)
    {
         
        // Convert the no. to
        // String
        String s = String.Join("", i);
       
        // Convert String to set using stl
        HashSet<int> uniDigits = new HashSet<int>();
        foreach(int c in s.ToCharArray())
            uniDigits.Add(c);
             
        // Output if condition satisfies
        if (s.Length == uniDigits.Count)
        {
            Console.Write(i + " ");
        }
    }
}
 
// Driver Code
public static void Main(String[] args)
{
   
    // Input of the lower and
    // higher limits
    int l = 1, r = 20;
     
    // Function Call
    printUnique(l, r);
}
}
 
// This code is contributed by Princi Singh


Javascript




<script>
 
// JavaScript code for the above approach
 
// Function to print unique
// numbers
function printUnique(l, r) {
 
    // Iterate from l to r
    for (let i = l; i <= r; i++) {
 
        // Convert the no. to
        // string
        let s = String(i);
 
        // Convert string to set using stl
        let uniDigits = new Set();
        for(let c of s.split(""))
            uniDigits.add(c);
             
        // Output if condition satisfies
        if (s.length == uniDigits.size) {
            document.write(i + " ");
        }
    }
}
 
// Driver Code
 
// Input of the lower and
// higher limits
let l = 1, r = 20;
 
// Function Call
printUnique(l, r);
 
</script>


Output

1 2 3 4 5 6 7 8 9 10 12 13 14 15 16 17 18 19 20 




Time Complexity: O(nlogn)
Auxiliary Space: O(n)



Last Updated : 23 Dec, 2023
Like Article
Save Article
Previous
Next
Share your thoughts in the comments
Similar Reads