GeeksforGeeks App
Open App
Browser
Continue

# Construct smallest N-digit number possible by placing digits at positions specified by given array

Given two integers N and M and an 2D array arr[], the task is to construct the smallest possible integer of N digits ( without leading zeroes ) such that the arr[i][0]th digit from the left is arr[i][1]. If it is not possible to construct any such integer, print “No”. Otherwise, print that number.

Examples:

Input : N = 3, arr[]={{0, 7}, {2, 2}}
Output: 702
Explanation: According to the conditions, the 1st And 3rd digit should be equal to 7 and 2. The number should be of the form 7_2. Therefore, the minimum integer possible is 702.

Input : N = 3, arr[]={{1, 1}, {1, 3}}
Output: No

Naive Approach: Since the digits will always be from 0 to 9, the simplest approach is to check for a combination of every integer exceeding 0 and less than 10N by placing the digits according to the given conditions.

Below is the implementation of the above approach:

## C++

 // C++ program to implement// the above approach #include using namespace std; // Function to check if num satisfies the// arrangement specified by the vector Abool check(int num, int N, int M,           vector >& A){    // Convert num to equivalent string    string temp = to_string(num);     // If the number of digits    // is not equal to N    if (temp.size() != N) {        return false;    }     // Iterate over the vector A    for (int i = 0; i < M; i++) {         // If the digit at A[i].first position        // not the same as A[i].second        if (temp[A[i].first] != A[i].second) {            return false;        }    }     return true;} // Function to find the smallest integer// satisfying the given conditionsvoid find_num(int N, vector >& A){    int ans = -1;     // Check for every combination upto 10^N    for (int i = 0; i < pow(10, N); i++) {         // If condition satisfies        if (check(i, N, A.size(), A)) {            ans = i;            break;        }    }     if (ans == -1)        cout << "No";    else        cout << ans;} // Driver Codeint main(){     int N = 3;    vector > A        = { { 0, '7' }, { 2, '2' }, { 0, '7' } };     find_num(N, A);}

## Java

 // Java program to implement// the above approachimport java.util.*; class GFG{    static class pair    {        int first;        char second;        public pair(int first, char second)         {            this.first = first;            this.second = second;        }       }; // Function to check if num satisfies the// arrangement specified by the vector Astatic boolean check(int num, int N, int M,           Vector A){    // Convert num to equivalent String    String temp = String.valueOf(num);     // If the number of digits    // is not equal to N    if (temp.length() != N) {        return false;    }     // Iterate over the vector A    for (int i = 0; i < M; i++) {         // If the digit at A[i].first position        // not the same as A[i].second        if (temp.charAt(A.get(i).first) != A.get(i).second) {            return false;        }    }     return true;} // Function to find the smallest integer// satisfying the given conditionsstatic void find_num(int N, Vector A){    int ans = -1;     // Check for every combination upto 10^N    for (int i = 0; i < Math.pow(10, N); i++) {         // If condition satisfies        if (check(i, N, A.size(), A)) {            ans = i;            break;        }    }     if (ans == -1)        System.out.print("No");    else        System.out.print(ans);} // Driver Codepublic static void main(String[] args){     int N = 3;    Vector A = new Vector<>();    A.add(new pair(0, '7' ));    A.add(new pair(2, '2'));    A.add(new pair( 0, '7'));            find_num(N, A);}} // This code is contributed by 29AjayKumar

## Python3

 # Python3 program to implement# the above approach # Function to check if num satisfies the# arrangement specified by the vector Adef check(num, N, M, A) :     # Convert num to equivalent string    temp = str(num)     # If the number of digits    # is not equal to N    if (len(temp) != N) :        return False     # Iterate over the vector A    for i in range(M) :         # If the digit at A[i].first position        # not the same as A[i].second        if (temp[A[i][0]] != A[i][1]) :            return False     return True # Function to find the smallest integer# satisfying the given conditionsdef find_num(N, A) :     ans = -1     # Check for every combination upto 10^N    for i in range(pow(10, N)) :         # If condition satisfies        if (check(i, N, len(A), A)) :            ans = i            break     if (ans == -1) :        print("No")    else :        print(ans)  N = 3A = [ [ 0, '7' ], [ 2, '2' ], [ 0, '7' ] ] find_num(N, A) # This code is contributed by divyesh072019

## C#

 // C# program to implement// the above approachusing System;using System.Collections.Generic; class GFG{    public class pair    {        public int first;        public char second;        public pair(int first, char second)         {            this.first = first;            this.second = second;        }       }; // Function to check if num satisfies the// arrangement specified by the vector Astatic bool check(int num, int N, int M,           List A){    // Convert num to equivalent String    String temp = String.Join("",num);     // If the number of digits    // is not equal to N    if (temp.Length != N) {        return false;    }     // Iterate over the vector A    for (int i = 0; i < M; i++) {         // If the digit at A[i].first position        // not the same as A[i].second        if (temp[A[i].first] != A[i].second) {            return false;        }    }     return true;} // Function to find the smallest integer// satisfying the given conditionsstatic void find_num(int N, List A){    int ans = -1;     // Check for every combination upto 10^N    for (int i = 0; i < Math.Pow(10, N); i++) {         // If condition satisfies        if (check(i, N, A.Count, A)) {            ans = i;            break;        }    }     if (ans == -1)        Console.Write("No");    else        Console.Write(ans);} // Driver Codepublic static void Main(String[] args){     int N = 3;    List A = new List();    A.Add(new pair(0, '7' ));    A.Add(new pair(2, '2'));    A.Add(new pair( 0, '7'));           find_num(N, A);}} // This code is contributed by shikhasingrajput

## Javascript



Output:

702

Time Complexity: O(10N * M)
Auxiliary Space: O(N)

Efficient Approach: Follow the steps below to solve the problem:

• Initialize a Map, say mp, to assign digits to the corresponding positions.
• If the first digit required to be placed is 0, then print “No” as the number cannot contain leading zeroes.
• Traverse the array arr[] and insert the digits at respective indices in the Map.
• Run a loop from 1 to N and for each i, check if a digit is assigned to the ith position in the Map. If present in the Map, add it to the answer.

Below is the implementation of the above approach:

## C++

 // C++ program to implement// the above approach #include using namespace std; // Function to find the smallest integer// satisfying the given conditionsvoid find_num(int N, vector >& A){    // Stores the digits at their    // respective positions    map mp;     // Traverse the array    for (int i = 0; i < A.size(); i++) {         // If first digit required        // to be placed is 0        if (N > 1 and A[i].first == 0            and A[i].second == 0) {             // Not possible            cout << "No";            return;        }         // If multiple numbers are assigned        // to be placed in a single position        if (mp.find(A[i].first) != mp.end()            and mp[A[i].first] != A[i].second) {             // Not possible            cout << "No";            return;        }         // Assign the digits to their        // respective positions        mp[A[i].first] = A[i].second;    }     // Stores the result    string ans = "";     // Traverse for all N digits    for (int i = 0; i < N; i++) {         // For the first position        if (N > 1 and i == 0) {             // If digit is assigned            // to the position            if (mp.find(0) != mp.end()) {                ans += to_string(mp[0]);            }             // Otherwise            else {                ans += to_string(1);            }        }         else {            // Add it to answer            ans += to_string(mp[i]);        }    }     cout << ans << "\n";} // Driver Codeint main(){     int N = 3;    vector > A        = { { 0, 7 }, { 2, 2 }, { 0, 7 } };     find_num(N, A);}

## Java

 // Java program to implement// the above approachimport java.util.*; class GFG{     static class pair{    int first, second;         public pair(int first, int second)     {        this.first = first;        this.second = second;    }   } // Function to find the smallest integer// satisfying the given conditionsstatic void find_num(int N, pair []A){         // Stores the digits at their    // respective positions    HashMap mp = new HashMap();     // Traverse the array    for(int i = 0; i < A.length; i++)    {                 // If first digit required        // to be placed is 0        if (N > 1 && A[i].first == 0 &&            A[i].second == 0)        {                         // Not possible            System.out.print("No");            return;        }         // If multiple numbers are assigned        // to be placed in a single position        if (mp.containsKey(A[i].first) &&            mp.get(A[i].first) != A[i].second)        {                         // Not possible            System.out.print("No");            return;        }         // Assign the digits to their        // respective positions        mp.put(A[i].first, A[i].second);    }     // Stores the result    String ans = "";     // Traverse for all N digits    for(int i = 0; i < N; i++)    {                 // For the first position        if (N > 1 && i == 0)        {             // If digit is assigned            // to the position            if (mp.containsKey(0))            {                                 ans += String.valueOf(mp.get(0));            }             // Otherwise            else            {                ans += String.valueOf(1);            }        }        else        {                         // Add it to answer            if (mp.get(i) == null)                ans += String.valueOf(0);            else                ans += String.valueOf(mp.get(i));        }    }    System.out.print(ans + "\n");} // Driver Codepublic static void main(String[] args){    int N = 3;    pair []A = { new pair(0, 7),                 new pair(2, 2),                 new pair(0, 7)};                      find_num(N, A);}} // This code is contributed by Amit Katiyar

## Python3

 # Python3 program to implement# the above approach # Function to find the smallest integer# satisfying the given conditionsdef find_num(N, A) :     # Stores the digits at their    # respective positions    mp = {}     # Traverse the array    for i in range(len(A)) :         # If first digit required        # to be placed is 0        if ((N > 1) and (A[i][0] == 0) and (A[i][1] == 0)) :             # Not possible            print("No")            return         # If multiple numbers are assigned        # to be placed in a single position        if ((A[i][0] in mp) and (mp[A[i][0]] != A[i][1])) :             # Not possible            print("No")            return         # Assign the digits to their        # respective positions        mp[A[i][0]] = A[i][1]     # Stores the result    ans = ""     # Traverse for all N digits    for i in range(N) :         # For the first position        if (N > 1 and i == 0) :             # If digit is assigned            # to the position            if (0 in mp) :                ans = ans + str(mp[0])             # Otherwise            else :                ans = ans + str(1)         else :            # Add it to answer            if i in mp :                ans = ans + str(mp[i])            else :                ans = ans + str(0)     print(ans) # Driver codeN = 3A = [ [ 0, 7 ], [ 2, 2 ], [ 0, 7 ] ] find_num(N, A) # This code is contributed by divyesh072019

## C#

 // C# program to implement// the above approachusing System;using System.Collections.Generic;class GFG{     public class pair{    public int first, second;         public pair(int first, int second)     {        this.first = first;        this.second = second;    }   } // Function to find the smallest integer// satisfying the given conditionsstatic void find_num(int N, pair []A){         // Stores the digits at their    // respective positions    Dictionary mp = new Dictionary();     // Traverse the array    for(int i = 0; i < A.Length; i++)    {                 // If first digit required        // to be placed is 0        if (N > 1 && A[i].first == 0 &&            A[i].second == 0)        {                         // Not possible            Console.Write("No");            return;        }         // If multiple numbers are assigned        // to be placed in a single position        if (mp.ContainsKey(A[i].first) &&            mp[A[i].first] != A[i].second)        {                         // Not possible            Console.Write("No");            return;        }         // Assign the digits to their        // respective positions        if(mp.ContainsKey(A[i].first))            mp[A[i].first] = A[i].second;        else        mp.Add(A[i].first, A[i].second);    }     // Stores the result    String ans = "";     // Traverse for all N digits    for(int i = 0; i < N; i++)    {                 // For the first position        if (N > 1 && i == 0)        {             // If digit is assigned            // to the position            if (mp.ContainsKey(0))            {                                 ans += String.Join("", mp[0]);            }             // Otherwise            else            {                ans += String.Join("", 1);            }        }        else        {                         // Add it to answer            if ( ! mp.ContainsKey(i) )                ans += String.Join("", 0);            else                ans += String.Join("", mp[i]);        }    }    Console.Write(ans + "\n");} // Driver Codepublic static void Main(String[] args){    int N = 3;    pair []A = { new pair(0, 7),                 new pair(2, 2),                 new pair(0, 7)};                      find_num(N, A);}} // This code is contributed by 29AjayKumar

## Javascript



Output:

702

Time Complexity: O(N + M)
Auxiliary Space: O(N)

My Personal Notes arrow_drop_up