Related Articles

# Smallest number containing all possible N length permutations using digits 0 to D

• Difficulty Level : Medium
• Last Updated : 13 Jul, 2020

Given two integer N and K, the task is to find the size of the smallest string that contains all permutations of length N that can be formed using first D digits (0, 1, …, D-1).

Examples:

Input: N = 2, D = 2
Output: 01100
Explanation:
Possible permutations of length 2 from digits (0, 1) are {00, 01, 10, 11}.
“01100” is one such string that contains all the permutations as a substring.
Other possible answers are “00110”, “10011”, “11001”

Input: N = 2, D = 4
Output: 03322312113020100
Explaination:
Here all possible permutations of length 2 from digits {0, 1, 2, 3} are
00 10 20 30
01 11 21 31
02 12 22 32
03 13 23 33
“03322312113020100” is a string of minimum length that contains all the above permutations.

## Recommended: Please try your approach on {IDE} first, before moving on to the solution.

Approach:
Append ‘0’ N-1 times and call DFS on the string in the current state. Append all the D characters one by one. Every time after appending, check if the new string is visited or not. If so, mark it visited by inserting it into a HashSet and add this character in the answer. Recursively call the DFS function on the last D characters. Repeat this process until all possible substrings of N length from the D digits are appended to the string. Print the final string generated.

Below is the implementation of the above approach:

## Java

 `// Java Program to find the``// minimum length string``// consisting of all``// permutations of length N``// of D digits``import` `java.io.*;``import` `java.util.*;``import` `java.lang.*;`` ` `class` `GeeksforGeeks {`` ` `    ``// Initialize hashset to see``    ``// if all the possible``    ``// permutations are present``    ``// in the min length string``    ``static` `Set visited;``    ``// To keep min length string``    ``static` `StringBuilder ans;`` ` `    ``public` `static` `String reqString(``int` `N,``                                   ``int` `D)``    ``{``        ``// Base case``        ``if` `(N == ``1` `&& D == ``1``)``            ``return` `"0"``;``        ``visited = ``new` `HashSet<>();``        ``ans = ``new` `StringBuilder();`` ` `        ``StringBuilder sb = ``new` `StringBuilder();``        ``// Append '0' n-1 times``        ``for` `(``int` `i = ``0``; i < N - ``1``; ++i) {``            ``sb.append(``"0"``);``        ``}``        ``String start = sb.toString();``        ``// Call the DFS Function``        ``dfs(start, D);``        ``ans.append(start);`` ` `        ``return` `new` `String(ans);``    ``}``    ``// Generate the required string``    ``public` `static` `void` `dfs(String curr, ``int` `D)``    ``{``        ``// Iterate over all the possible``        ``// character``        ``for` `(``int` `x = ``0``; x < D; ++x) {``            ``// Append to make a new string``            ``String neighbour = curr + x;``            ``// If the new string is not``            ``// visited``            ``if` `(!visited.contains(neighbour)) {``                ``// Add in hashset``                ``visited.add(neighbour);``                ``// Call the dfs function on``                ``// the last d characters``                ``dfs(neighbour.substring(``1``), D);`` ` `                ``ans.append(x);``            ``}``        ``}``    ``}``    ``// Driver Code``    ``public` `static` `void` `main(String args[])``    ``{`` ` `        ``int` `N = ``2``;``        ``int` `D = ``2``;``        ``System.out.println(reqString(N, D));``    ``}``}`
Output:
```01100
```

Time Complexity: O(N * DN)
Auxiliary Space: O(N * DN)

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.  To complete your preparation from learning a language to DS Algo and many more,  please refer Complete Interview Preparation Course.

In case you wish to attend live classes with experts, please refer DSA Live Classes for Working Professionals and Competitive Programming Live for Students.

My Personal Notes arrow_drop_up