您的位置:首页 > 产品设计 > UI/UE

Permutation Sequence

2015-12-18 23:57 519 查看

Permutation Sequence

Total Accepted: 44618 Total Submissions: 187104 Difficulty: Medium

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=8

1.固定第0个位置后面有3!=6中排列,

2.固定第0,1个位置后面有2!=2中排列

pos: 0 1 2 3

3! 2! 1! 0

第0个位置每固定一个字符,后面就有6种排列,所以第0个位置分别为'1','2','3','4'时分别对应的排列的范围是:

序号 字符 范围

0 '1' 第1-6个排序

1 '2' 第7-12个排列

2 '3' 第13-18个排列

3 '4' 第19-24个排列

k=8 属于第7-12个排列,其实就是(k-1)/6个序号的排列

排好第0个位置的字符后,按同样的方法排第1个位置就可以了,此时,k=k%6=8%6=2;

class Solution {
public:
string getPermutation(int n, int k) {

string s;
int fact = 1;

for(int i=1;i<=n;i++){
s.push_back(i+'0');
fact *= i;
}

k--;

string res

while(n){
fact /= n;
int pos = k/fact;
res.push_back(s[pos]);
s.erase(s.begin()+pos);
k = k%fact;
--n;
}

return res;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: