2012-03-01 15 views
5

Mam tablicę znaków c [] [] z różnymi mapowaniami do każdego indeksu. Na przykład:Uzyskaj wszystkie możliwe kombinacje znaków w tablicy

{'a', 'b', 'c', 'd', 'e', 'f' } {'g', 'h', 'i' } 

muszę zwrócić wszystkie możliwe kombinacje znaków dla tej tablicy jako ciąg znaków. To oznacza, że ​​dla powyższej tablicy znaków powinienem zwrócić: "ag", "ah", "ai", "bg", "bh", "bi", "cg", "ch", "ci" , itd. Byłoby łatwo zrobić to dla tablicy postaci tylko dwóch rzeczy jak wyżej, ale jeśli jest więcej tablic, to nie wiem co robić ... Właśnie o to proszę wszystkich Pomóż mi z! :)

+0

odjazdu http://stackoverflow.com/questions/2920315/permutation-of-array – JKirchartz

+0

Co głębokość nie tablica mieć? To znaczy ile wymiarów? –

Odpowiedz

10

Dla dwóch tablic dwie zagnieżdżone pętle należy zrobić:

for (int i = 0 ; i != c[0].length ; i++) { 
    for (int j = 0 ; j != c[1].length ; j++) { 
     System.out.writeln(""+c[0][i]+c[1][j]); 
    } 
} 

Więcej gniazdowania musisz rekurencyjny lub równoważnego rozwiązania na stosie.

void combos(int pos, char[][] c, String soFar) { 
    if (pos == c.length) { 
     System.out.writeln(soFar); 
     return; 
    } 
    for (int i = 0 ; i != c[pos].length ; i++) { 
     combos(pos+1, c, soFar + c[pos][i]); 
    } 
} 

nazywają to funkcja rekurencyjna ze swoimi main() jak ten:

combos(0, c, ""); 
+0

Ach, powinienem był to zrozumieć. : p Dzięki za pomoc! Naprawdę fajny kod. – Supervisor

+0

@Supervisor Serdecznie zapraszamy! Jeśli odpowiedź na ciebie działa, rozważ [zaakceptowanie] (http://meta.stackexchange.com/questions/16721/how-does-accept-rate-work), aby wskazać, że problem został rozwiązany, i zdobyć sobie zupełnie nowa odznaka na przepełnieniu stosu. – dasblinkenlight

+0

Gotowe i gotowe. :) – Supervisor

Powiązane problemy