60. Permutation Sequence java solutions

The set [1,2,3,…,n] contains a total of n! unique permutations.

By listing and labeling all of the permutations in order,
We get the following sequence (ie, for n = 3):

  1. "123"
  2. "132"
  3. "213"
  4. "231"
  5. "312"
  6. "321"

 

Given n and k, return the kth permutation sequence.

Note: Given n will be between 1 and 9 inclusive.

 

 1 public class Solution {
 2     public String getPermutation(int n, int k) {
 3         StringBuilder ans = new StringBuilder();
 4         StringBuilder tmp = new StringBuilder();
 5         for(int i = 1; i<=n; i++) tmp.append(i);
 6         int factor = calculate(n);
 7         int index = 0;
 8         for(int i = n; i>=1; i--){
 9             factor /= i;
10             index = (k-1)/factor;
11             ans.append(tmp.charAt(index));
12             k -= index*factor;
13             tmp.deleteCharAt(index);
14         }
15         return ans.toString();
16     }
17     
18     public int calculate(int n){
19         int sum = 1;
20         for(;n>=1; n--){
21             sum *= n;
22         }
23         return sum;
24     }
25 }

n个数的permutation总共有n阶乘个,基于这个性质我们可以得到某一位对应的数字是哪一个。思路是这样的,比如当前长度是n,我们知道每个相同的起始元素对应(n-1)!个permutation,

也就是(n-1)!个permutation后会换一个起始元素。因此,只要当前的k进行(n-1)!取余,得到的数字就是当前剩余数组的index,如此就可以得到对应的元素。

https://discuss.leetcode.com/topic/17348/explain-like-i-m-five-java-solution-in-o-n

posted @ 2016-07-15 08:41  Miller1991  阅读(342)  评论(0编辑  收藏  举报