Print all numbers less than N with at-most 2 unique digits

Given a number N(less than 10^9). The task is to print all the numbers less than N which are having a maximum of 2 unique digits.

Note: Number such as 100, 111, 101 are valid as the number of unique digits are at most 2 but 123 is invalid as it has 3 unique digits.

Examples:



Input: N = 12
Output: The numbers are: 1 2 3 4 5 6 7 8 9 10 11

Input: N = 154
Output: The numbers are: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 110 111 112 113 114 115 116 117 118 119 121 122 131 133 141 144 151

Approach:

Below is the implementation of the above approach:

filter_none

edit
close

play_arrow

link
brightness_4
code

// C++ program to print all the numbers
// less than N which have at most 2 unique digits
#include <bits/stdc++.h>
using namespace std;
  
set<int> st;
  
// Function to generate all possible numbers
void generateNumbers(int n, int num, int a, int b)
{
    // If the number is less than n
    if (num > 0 && num < n)
        st.insert(num);
  
    // If the number exceeds
    if (num >= n)
        return;
  
    // Check if it is not the same number
    if (num * 10 + a > num)
        generateNumbers(n, num * 10 + a, a, b);
  
    generateNumbers(n, num * 10 + b, a, b);
}
  
// Function to print all numbers
void printNumbers(int n)
{
    // All combination of digits
    for (int i = 0; i <= 9; i++)
        for (int j = i + 1; j <= 9; j++)
            generateNumbers(n, 0, i, j);
  
    cout << "The numbers are: ";
  
    // Print all numbers
    while (!st.empty()) {
        cout << *st.begin() << " ";
        st.erase(st.begin());
    }
}
  
// Driver code
int main()
{
    int n = 12;
  
    printNumbers(n);
  
    return 0;
}
chevron_right

filter_none

edit
close

play_arrow

link
brightness_4
code

// Java program to print all the numbers 
// less than N which have at most 2 unique digits 
import java.util.*;
class GFG{
    
static Set<Integer> st= new HashSet<Integer>(); 
    
// Function to generate all possible numbers 
static void generateNumbers(int n, int num, int a, int b) 
    // If the number is less than n 
    if (num > 0 && num < n) 
        st.add(num); 
    
    // If the number exceeds 
    if (num >= n) 
        return
    
    // Check if it is not the same number 
    if (num * 10 + a > num) 
        generateNumbers(n, num * 10 + a, a, b); 
    
    generateNumbers(n, num * 10 + b, a, b); 
    
// Function to print all numbers 
static void printNumbers(int n) 
    // All combination of digits 
    for (int i = 0; i <= 9; i++) 
        for (int j = i + 1; j <= 9; j++) 
            generateNumbers(n, 0, i, j); 
    
    System.out.print( "The numbers are: "); 
    
    // Print all numbers 
    System.out.print(st);
      
    st.clear();
    
// Driver code 
public static void main(String args[]) 
    int n = 12
    
    printNumbers(n); 
    
}
// This code is contributed by Arnab Kundu
chevron_right

filter_none

edit
close

play_arrow

link
brightness_4
code

# Python 3 program to print all the 
# numbers less than N which have at 
# most 2 unique digits
st = set()
  
# Function to generate all possible numbers
def generateNumbers(n, num, a, b):
      
    # If the number is less than n
    if (num > 0 and num < n):
        st.add(num)
  
    # If the number exceeds
    if (num >= n):
        return
  
    # Check if it is not the same number
    if (num * 10 + a > num):
        generateNumbers(n, num * 10 + a, a, b)
  
    generateNumbers(n, num * 10 + b, a, b)
  
# Function to print all numbers
def printNumbers(n):
      
    # All combination of digits
    for i in range(10):
        for j in range(i + 1, 10, 1):
            generateNumbers(n, 0, i, j)
  
    print("The numbers are:", end = " ")
      
    # Print all numbers
    l = list(st)
    for i in l:
        print(i, end = " ")
  
# Driver code
if __name__ == '__main__':
    n = 12
  
    printNumbers(n)
  
# This code is contributed by
# Shashank_Sharma
chevron_right

filter_none

edit
close

play_arrow

link
brightness_4
code

// C# program to print all the numbers 
// less than N which have at most 2 unique digits 
using System;
using System.Collections.Generic;
  
class GFG
{
      
static SortedSet<int> st = new SortedSet<int>(); 
      
// Function to generate all possible numbers 
static void generateNumbers(int n, int num, int a, int b) 
    // If the number is less than n 
    if (num > 0 && num < n) 
        st.Add(num); 
      
    // If the number exceeds 
    if (num >= n) 
        return
      
    // Check if it is not the same number 
    if (num * 10 + a > num) 
        generateNumbers(n, num * 10 + a, a, b); 
      
    generateNumbers(n, num * 10 + b, a, b); 
      
// Function to print all numbers 
static void printNumbers(int n) 
    // All combination of digits 
    for (int i = 0; i <= 9; i++) 
        for (int j = i + 1; j <= 9; j++) 
            generateNumbers(n, 0, i, j); 
      
    Console.Write( "The numbers are: "); 
      
    // Print all numbers 
    foreach(int obj in st)
        Console.Write(obj+" ");
      
    st.Clear();
      
// Driver code 
public static void Main(String []args) 
    int n = 12; 
      
    printNumbers(n); 
}
  
// This code has been contributed by 29AjayKumar
chevron_right

Output:
The numbers are: 1 2 3 4 5 6 7 8 9 10 11

Time complexity: O(36* 230)




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.



Article Tags :