PermutationSequence,求第k个全排列

问题描述:给定一个数组,数组里面元素不重复,求第k个全排列。

算法分析:这道题就是用到取商取模运算。

 1 public String getPermutation(int n, int k) {
 2          
 3         // initialize all numbers
 4         ArrayList<Integer> numberList = new ArrayList<Integer>();
 5         for (int i = 1; i <= n; i++) {
 6             numberList.add(i);
 7         }
 8  
 9         //第k个,按下标算是第k-1个
10         k--;
11  
12         int mod = 1;
13         for (int i = 1; i <= n; i++) {//mod = n!
14             mod = mod * i;
15         }
16  
17         String result = "";
18  
19         for (int i = 0; i < n; i++) {
20             mod = mod / (n - i);//第一个元素后面有(n-1)!种组合,剩下的依次迭代
21             int curIndex = k / mod;//第一个元素的下标,剩下的依次迭代
22             // update k
23             k = k % mod;
24  
25             // get number according to curIndex
26             result += numberList.get(curIndex);
27             // remove from list        ..
28             numberList.remove(curIndex);
29         }
30  
31         return result.toString();
32     }

 

posted @ 2016-06-06 20:18  32ddd  阅读(307)  评论(0编辑  收藏  举报