package backtracking;
import java.util.Arrays;
/*
Find all n length Combinations of a given alphabets.
First lets see, what does this question means.
if given n=2 and arr={"A","B"};
Output:
AA
AB
BA
BB
if given n=2 and arr={"A","B", C};
Output:
AA
AB
AC
BA
BB
BC
CA
CB
CC
and so on.
How many combinations can be created depends on k^r where k is length of unique Alphabets to use. r is number of places to fill.
In first example above, k=2(A,B), r=2(need 2 digit combinations)
2^2 = 4 combinations possible.
In second example above, k=3(A,B,C), r=2(need 2 digit combinations)
3^2 = 9 combinations possible.
How to find it
----------------
If we want to find out 3 digits combination of {A,B,C} ie k=3 and r=3 then 3^3 = 27 combinations possible.
Logically our loop will flow like below recursively,
our base case to break is when iteration matches the number of combinations ie n.
A -> A -> A -> print str and return
B -> print str and return
C -> print str and return
B -> A -> print str and return
B -> print str and return
C -> print str and return
C -> A -> print str and return
B -> print str and return
C -> print str and return
B -> A -> A -> print str and return
B -> print str and return
C -> print str and return
B -> A -> print str and return
B -> print str and return
C -> print str and return
C -> A -> print str and return
B -> print str and return
C -> print str and return
C -> A -> A -> print str and return
B -> print str and return
C -> print str and return
B -> A -> print str and return
B -> print str and return
C -> print str and return
C -> A -> print str and return
B -> print str and return
C -> print str and return
Loop End.
*/
public class GenerateAllCombinationOfNBits {
public static void main(String[] args) {
String[] sarray = {"A","B", "C"};
new GenerateAllCombinationOfNBits().printCombinationWithoutTemporaryArrayOfBinaryNumbers(new int[2], 2);
new GenerateAllCombinationOfNBits().printCombinationWithTemporaryArray(sarray, new String[2], 2);
new GenerateAllCombinationOfNBits().printCombinationWithoutTemporaryArray(sarray,"",2);
}
//IF YOU WANT TO FIND COMBINATION OF BINARY DIGITS ONLY ie 0 and 1
private void printCombinationWithoutTemporaryArrayOfBinaryNumbers(int[] array, int N){
if (N < 1) {
for (int i = 0; i < array.length; i++) {
System.out.print(array[i]);
}
System.out.println();
}
else {
array[N-1]=0;
printCombinationWithoutTemporaryArrayOfBinaryNumbers(array, N-1);
array[N-1] = 1;
printCombinationWithoutTemporaryArrayOfBinaryNumbers(array, N-1);
}
}
public void printCombinationWithoutTemporaryArray(String[] combinationOf, String str, int lengthOfCombination){
if(lengthOfCombination<1){
System.out.println(str);
}else{
for (int i = 0; i < combinationOf.length; i++) {
String st = combinationOf[i];
printCombinationWithoutTemporaryArray(combinationOf, str+st, lengthOfCombination-1);
}
}
}
public void printCombinationWithTemporaryArray(String[] arrayToUse, String[] arrayToWorkOn, int n){
if(n<1){
printStringArray(arrayToWorkOn);
}else{
for (int i = 0; i < arrayToUse.length; i++) {
arrayToWorkOn[n-1] = arrayToUse[i];
printCombinationWithTemporaryArray(arrayToUse, arrayToWorkOn, n-1);
}
}
}
private static void printStringArray(String[] array2) {
System.out.println(Arrays.toString(array2));
}
}
Questions on Stack, Queues, Linkedlist, Binary Trees, Sorting, Searching, Graphs etc with solution using Java Language.
Monday, 25 May 2015
Print all possible strings of length k that can be formed from a set of n characters.
Labels:
Backtracking,
String
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment