标签:
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.
思路:从高位到低位依次判断各个位的值。比如原始n=4,k=15;
以1为起始:共有6种结果,6<15;
以2为起始:共有6中结果,6+6<15;
以3为起始:共有6中结果,6+6+6>15; 所以第一位是3; 剩余元素从小到大为1,2,4;
第2个元素为1:有2中结果,6+6+2<15;
第2为元素为2:有2种结果,6+6+2+2>15;所以第二位是2,;剩余元素从小打到为1,4;
此时6+6+2=14<15;即问题变成“以3,2为开头,1,4的排列中第一个排列是什么“,显然就是3214,就是我们需要的结果。
代码如下:
public String getPermutation(int n, int k) { int total = 1; for(int i=2 ;i<=n ;i++) total *= i; if(k>total || k<1) return ""; int[] all = new int[n]; for(int i=0; i<n; i++) all[i] = i+1; getPermutation(all, 0, k, total/n); String result = ""; for(int i=0; i<n; i++) result+=all[i]; return result; } public void getPermutation(int[] all, int index , int k, int maxOnce) { if(k == 1) return; int i=index; for(; i<all.length; i++) { if(k - maxOnce < 1) break; k -= maxOnce; } int tmp = all[i]; for(int j=i-1; j>=index; j--) { all[j+1] = all[j]; } all[index] = tmp; getPermutation(all, index+1, k, maxOnce/(all.length-1-index)); }
LeetCode-60 Permutation Sequence
标签:
原文地址:http://www.cnblogs.com/linxiong/p/4492461.html