//x为排列的排名,范围[0~n!-1] //n为字符的个数 public static String intToArray(int x,int n) { boolean[] used=new boolean[n+1]; StringBuilder sb=new StringBuilder(); for(int i=1;i<=n;i++) { int temp=x/factorial(n-i); int j; for(j=1;j<=n;j++) if(!used[j]) { if(temp==0) break; temp--; } sb.append(j); used[j]=true; x%=factorial(n-i); } return sb.toString(); } public static int factorial(int n) { int sum=1; while(n>0) { sum*=n; n--; } return sum; }
//x为排列的排名,范围[0~n!-1] //n为字符的个数 //arr为指定数字的数组 public static String intToArray(int x,int n,int[] arr) { boolean[] used=new boolean[n+1]; StringBuilder sb=new StringBuilder(); for(int i=1;i<=n;i++) { int temp=x/factorial(n-i); int j; for(j=1;j<=n;j++) if(!used[j]) { if(temp==0) break; temp--; } sb.append(arr[j-1]); used[j]=true; x%=factorial(n-i); } return sb.toString(); }
//arr为待转换的数组,数组中的数字必须是由1~n组成的 public static int arrayToInt(int[] arr,int n) { int ret=0; for(int i=0;i<n;i++) { int temp=arr[i]-1; for(int j=0;j<i;j++) if(arr[j]<arr[i]) temp--; ret+=factorial(n-1-i)*temp; } return ret; }