求1234的排列数,这种求法得到的排列数按照从小到大排列的,有规律,适用于绝大部分情况(相比于swap方法)。
static int[] visited=new int[4];
//vistited[i]表示i+1已经用过了
static int[] array=new int[4];
static List<String> ans=new ArrayList<>();
public static void main(String[] args) {
backtrack(0);
for(String s:ans) System.out.println(s);
}
static void backtrack(int dep){
if(dep==4) {
String s="";
for(int i:array) s+=i;
ans.add(s);
return ;
}
for(int i=1;i<=4;i++){
if(visited[i-1]==1) continue;//直到找到一个没用过的
visited[i-1]=1;
array[dep]=i;
backtrack(dep+1);//注意这里是dep
visited[i-1]=0;
array[dep]=0;
}
}