package com.interview.recursion;
import java.util.ArrayList;
import java.util.List;
/**
* http://www.geeksforgeeks.org/find-all-possible-interpretations/
*/
public class InterpretationOfArray {
public void interpret(int arr[]){
char t[][] = new char[arr.length][2];
for(int i=0; i < arr.length; i++){
for(int j=0; j < 2; j++){
t[i][j] = '0';
}
}
for(int l=1; l <=2; l++){
for(int i=0; i <= arr.length -l ; i++){
int j = i + l-1;
t[i][l-1] = getRepresentation(i == j ? arr[i] : arr[i]*10 +arr[j]);
}
}
List<Character> result = new ArrayList<Character>();
interpret(arr.length,0,result,t);
}
private void interpret(int len,int pos,List<Character> result,char[][] t){
if(pos== len){
print(result);
return;
}
if(t[pos][0] != '0'){
result.add(t[pos][0]);
interpret(len,pos+1,result,t);
result.remove(result.size()-1);
}
if(pos+1 < len && t[pos][1] != '0'){
result.add(t[pos][1]);
interpret(len, pos+2, result, t);
result.remove(result.size()-1);
}
}
private void print(List<Character> result){
for(int i=0; i < result.size(); i++){
System.out.print(result.get(i) + " ");
}
System.out.println();
}
private char getRepresentation(int number){
if(number > 26 || number <= 0){
return '0';
}
return (char)('a' + number -1);
}
public static void main(String args[]){
int arr[] = {1,2,6,1,7};
InterpretationOfArray ioa = new InterpretationOfArray();
ioa.interpret(arr);
}
}