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):
"123"
"132"
"213"
"231"
"312"
"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