問題
求n個元素的全排列。
eg:
- 輸入:a b c
- 輸出:abc acb bac bca cab cba
思路
將這n個元素看做一個數組,我們用一個數值k(從0開始)來代表某個元素的位置索引,那麼讓數組中每一個元素與k進行一次交換,然後將k加1繼續調用遞歸,最後回溯(將交換位置後的數組還原)。
實現代碼
package suanfa;
//k:當前的交換位置
//讓k後面的每個元素與k交換
public class AllList {
public static void f(char[] data,int k)
{
if(k==data.length-1)
{
for(int i=0;i<data.length;i++)
{
System.out.print(data[i]+" ");
}
System.out.println();
}
for(int i=k;i<data.length;i++)
{
{//試探
char t=data[k];
data[k]=data[i];
data[i]=t;
}
f(data,k+1);
{//回溯
char t=data[k];
data[k]=data[i];
data[i]=t;
}
}
}
public static void main(String[] args) {
char[] data="ABCDE".toCharArray();
f(data,0);
}
}