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 }