package 深度递归;
//前缀法
public class case08_全排列下 {
public static void main(String[] args) {
String s="123";
solve("",s.toCharArray());
}
final static int k=3;
static int count=0;
private static void solve(String pre, char[] arr) {
if(pre.length()==arr.length){//前缀长度和字符集长度相等,一列已经排好
count++;
if(count==k){
System.out.println(pre.toString());
System.exit(0);
}
}
//每次从头扫描只要该字符可用就附加到前缀的后面
for(int i=0;i<arr.length;i++){
char c=arr[i];
//这个字符可用,前缀中这个字符出现的次数小于整个字符集中的次数就可以附加进去
if (count(pre.toCharArray(),c)<count(arr,c)) {
solve(pre+c,arr);
}
}
}
private static int count(char[] arr, char c) {
int cnt=0;
for(char ch:arr){
if(ch==c){
cnt++;
}
}
return cnt;
}
}