全排列应用

来源:互联网 发布:淘宝卖家怎么用返利网 编辑:程序博客网 时间:2024/05/16 14:58

题目:对于1到n的一个全排列,可以根据中间的大小关系插入合适的大于小于符号即‘>’和‘<’, 使其成为一个合法的不等式数列,但是只有k个小于号和n-k-1个大于号,请问1-n的任意排列情况中总共有多少种排列可以实现合法不等式数列?例:n=3,k=1输出为4:1<3>2,  3>1<2,  2>1<3,    2<3>1

public class FullPermutation {static int num = 0;static boolean check(int[] an,int n,int k){int less = 0;for (int i = 0;i<n-1;i++){if(an[i]<an[i+1])less++;}if (less==k)return true;else return false;}static void Permutation(int[] an,int k,int start,int end){if(start==end){for(int i=0;i<=end;i++){System.out.print(an[i]);}System.out.println("");if(check(an,end+1,k)) num++;}else{for(int cur=start;cur<=end;cur++){int temp = an[cur];an[cur] = an[start];an[start] = temp;Permutation(an,k,start+1,end);temp = an[cur];an[cur] = an[start];an[start] = temp;}}}public static void main(String[] args) {// TODO Auto-generated method stubint n = 3;int[] an = new int[3];for(int i = 0;i<n;i++){an[i] = i+1;}Permutation(an,1,0,n-1);System.out.print(num);}}

原创粉丝点击