Open In App

Numbers having Unique (or Distinct) digits

Last Updated : 23 Jul, 2025
Comments
Improve
Suggest changes
Like Article
Like
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

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);
    }
}
Python
# 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);
Python
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);
}
Python
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 
Python
# 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)


Article Tags :
Practice Tags :

Similar Reads