LeetCode 60. Permutation Sequence 全排列的第k个
2018-02-17 21:22
573 查看
求n位数的第k个全排列
利用 n个数字的全排列为n!
我们从第一个开始选
假设n =3。k=5
我们要确定第一位数是什么。
我们知道2的阶乘是 2
即每次跨越2个。
所以(5-1)/2=2
即我们跨越了2个 2
则所选数字为 第3个可选数字(用vis去查找可选数字)
注意最后一个数字要单独去找。class Solution {
public:
string getPermutation(int n, int k) {
int num[11], vis[11], i, j, index;
memset(vis,0,sizeof(vis));
num[0] = 1;
for(i = 1;i <= 9; i++){
num[i] = num[i-1] * i;
}
num[1] = 1;
string ans;
i = n-1;
while(i > 0){
index = (k-1)/num[i];
k = k - index * num[i];
for(j = 1;j <= n;j++){
if(!vis[j]){
if(index == 0)
break;
index--;
}
}
ans += j + '0';
vis[j] = 1;
i--;
}
for(j = 1;j <= n;j++)
if(!vis[j])
break;
ans += j + '0';
return ans;
}
};
利用 n个数字的全排列为n!
我们从第一个开始选
假设n =3。k=5
"123"
"132"
"213"
"231"
"312"
"321"
我们要确定第一位数是什么。
我们知道2的阶乘是 2
即每次跨越2个。
所以(5-1)/2=2
即我们跨越了2个 2
则所选数字为 第3个可选数字(用vis去查找可选数字)
注意最后一个数字要单独去找。class Solution {
public:
string getPermutation(int n, int k) {
int num[11], vis[11], i, j, index;
memset(vis,0,sizeof(vis));
num[0] = 1;
for(i = 1;i <= 9; i++){
num[i] = num[i-1] * i;
}
num[1] = 1;
string ans;
i = n-1;
while(i > 0){
index = (k-1)/num[i];
k = k - index * num[i];
for(j = 1;j <= n;j++){
if(!vis[j]){
if(index == 0)
break;
index--;
}
}
ans += j + '0';
vis[j] = 1;
i--;
}
for(j = 1;j <= n;j++)
if(!vis[j])
break;
ans += j + '0';
return ans;
}
};
相关文章推荐
- LeetCode(Permutation Sequence)输出全排列中第k个排列
- LeetCode-------60. Permutation Sequence(n的全排列中第K列)
- leetcode_60. Permutation Sequence 找n的全排列中的第k个序列
- LeetCode:60. Permutation Sequence
- LeetCode||60. Permutation Sequence
- Leetcode #60. Permutation Sequence 排列组合序列 解题报告
- Leetcode 60. Permutation Sequence
- Leetcode 60. Permutation Sequence (Medium) (cpp)
- LeetCode | 60. Permutation Sequence——第K个全排列
- [LeetCode]76. Permutation Sequence全排列序列
- leetcode 60. Permutation Sequence
- LEETCODE 60. Permutation Sequence
- [LeetCode]60. Permutation Sequence
- leetcode 60. Permutation Sequence
- 60. permutation sequence leetcode python
- leetcode 60. Permutation Sequence
- leetcode:Permutation Sequence (顺序排列第k个序列) 【面试算法题】
- [leetcode] 60. Permutation Sequence
- LeetCode 60. Permutation Sequence
- Leetcode--60. Permutation Sequence