Ispirato da quanto scritto da andbin ho risolto nel seguente modo , molto rude ma efficace:
(Preciso innanzitutto che so che l'input avrà lunghezza massima 8 , inoltre ora do l'ingresso come String invece che int [] ma vabè dettagli a partire da int [] costruisco la String concatenando i suoi elementi)
codice:
public static LinkedList<String> getCombinazioni (String s , int k) {
LinkedList<String> l = new LinkedList<String> ();
int n = s.length ();
StringBuilder sb = new StringBuilder ();
//1
if (k >= 1) {
for (int i=0;i<n;i++) {
l.add (s.charAt (i) + "");
}
}
//2
if (k >= 2) {
for (int i=0;i<n;i++) {
for (int j=i+1;j<n;j++) {
sb.append (s.charAt (i));
sb.append (s.charAt (j));
l.add (sb.toString ());
sb = new StringBuilder ();
}
}
}
//3
if (k>=3) {
for (int i=0;i<n;i++) {
for (int j=i+1;j<n;j++) {
sb = new StringBuilder ();
for (int z=j+1;z<n;z++) {
sb.append (s.charAt (i));
sb.append (s.charAt (j));
sb.append (s.charAt (z));
l.add (sb.toString ());
sb = new StringBuilder ();
}
}
}
}
//4
if (k >=4) {
for (int i=0;i<n;i++) {
for (int j=i+1;j<n;j++) {
for (int z=j+1;z<n;z++) {
for (int a=z+1;a<n;a++) {
sb.append (s.charAt (i));
sb.append (s.charAt (j));
sb.append (s.charAt (z));
sb.append (s.charAt (a));
l.add (sb.toString ());
sb = new StringBuilder ();
}
}
}
}
}
//5
if (k >= 5) {
for (int i=0;i<n;i++) {
for (int j=i+1;j<n;j++) {
for (int z=j+1;z<n;z++) {
for (int a=z+1;a<n;a++) {
for (int b=a+1;b<n;b++) {
sb.append (s.charAt (i));
sb.append (s.charAt (j));
sb.append (s.charAt (z));
sb.append (s.charAt (a));
sb.append (s.charAt (b));
l.add (sb.toString ());
sb = new StringBuilder ();
}
}
}
}
}
}
//6
if (k >= 6) {
for (int i=0;i<n;i++) {
for (int j=i+1;j<n;j++) {
for (int z=j+1;z<n;z++) {
for (int a=z+1;a<n;a++) {
for (int b=a+1;b<n;b++) {
for (int c=b+1;c<n;c++) {
sb.append (s.charAt (i));
sb.append (s.charAt (j));
sb.append (s.charAt (z));
sb.append (s.charAt (a));
sb.append (s.charAt (b));
sb.append (s.charAt (c));
l.add (sb.toString ());
sb = new StringBuilder ();
}
}
}
}
}
}
}
//7
//STESSA PROCEDURA FATTA SOPRA MA AGGIUNGENDO UN ALTRO FOR ANNIDATO
//8
//IDEM PER LA PROCEDURA 7 MA CON 8 FOR ANNIDATI...
return l;
}