最簡單的全排列,好比1,2的全排列是:1,2和2,1,即:1排完了,再排2,理論看很簡單,這也直接指導了相應的算法實現:算法
經過遞歸,第一項從1到n枚舉,相應的第二項從2開始,這其中須要一個散列數組哪些數字被用過了,以避免重複。最後,以最後一個位置的數字做爲遞歸的邊界。數組
因此,最終實現:遞歸+散列表(內部for循環)。code
…… 87654213 87654231 87654312 87654321 The total number of 8's Full Permutation is 322560.
void generateP(int index) { if (index == N + 1) { for (int i = 1; i <= N; i++) { printf("%d", P[i]); countN++; } printf("\n"); return; } //from 1 to ... for (int x = 1; x <= N; x++) { if (HashTable[x] == false) { P[index] = x; HashTable[x] = true; generateP(index + 1);// HashTable[x] = false; } } }