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

Leetcode #60 Permutation Sequence

2015-07-26 22:49 549 查看
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.

Difficulty: Medium

这题两个解法,第一个用nextPermutation,暴力算法,结果超时了。

第二个,通过一个巧妙地算法,比如第一位数的每个数的可能性为(n-1)!,通过一个sign[9]来记录每个数有没有用过,再通过(k-1)/(n-1)!来确定每一位是哪个数

解法一没通过就不上了

解法二:

int jc(int a)
{
if(a==0)
return 1;
int ans = 1;
for(int i = 1;i<=a;i++)
ans = ans * i;
return ans;
}

string getPermutation(int n, int k) {
string s;
int sign[9] = {0};
int index, n1 = n;

for(int i = 0;i<n1;i++)
{
index = (k-1)/jc(n-1);
int j = 0;
for(j = 0;j<n1;j++)
{
if(sign[j]==0)
index--;
if(index<0)
break;
}
sign[j]++;
s.push_back(j+'0'+1);
k = k%jc(n-1);
if(k ==0)
k = jc(n-1);
n--;

}
return s;

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