Java实现-排列序号2

来源:互联网 发布:微擎源码 编辑:程序博客网 时间:2024/06/06 00:56

public class Solution {    /**     * @param A an integer array     * @return a long integer     */    public long permutationIndexII(int[] A) {        // Write your code here        long index=0;for(int i=0;i<A.length;i++){int count=0;for(int j=i+1;j<A.length;j++){if(A[j]<A[i]){count++;}}if(count>0){HashMap<Integer,Integer> map=new HashMap<Integer, Integer>();for(int j=i;j<A.length;j++){if(!map.containsKey(A[j])){map.put(A[j], 1);}else{int temp=map.get(A[j]);map.put(A[j], ++temp);}}int size=0;Set<Integer> set=map.keySet();List<Integer> list=new ArrayList<Integer>();for(Integer e:set){list.add(map.get(e));if(e<A[i]){size+=map.get(e);}}long fenZi=size*factorial(A.length-i-1);long fenMu=1;for(int j=0;j<list.size();j++){fenMu*=factorial(list.get(j));}index+=fenZi/fenMu;}}return index+1;    }    private static long factorial(int n){if(n==1){return 1;}else{return factorial(n-1)*n;}}}


原创粉丝点击