[leetcode] 60. Permutation Sequence 解题报告
2016-06-11 07:06
489 查看
题目链接:https://leetcode.com/problems/permutation-sequence/
The set
unique permutations.
By listing and labeling all of the permutations in order,
We get the following sequence (ie, for n = 3):
Given n and k, return the kth permutation sequence.
Note: Given n will be between 1 and 9 inclusive.
思路:给定n个数字让求第k个序列.n个数字总共的全排列最多有n!个,并且全排列有个规律.
给定一个n,以1开头的排列有(n-1)!个,同样对2和3也是,所以如果k小于等于(n-1)!,那么首位必为1,因为以1开头的全排列有(n-1)!个.
同样如果k大于(n-1)!,那么第一个数就应该为(k-1)/(n-1)! + 1.这样找到了首位数字应该是哪个,剩下了(n-1)个数字,我们只需要再重复上面的步骤,不断缩小k即可.
代码如下:
class Solution {
public:
string getPermutation(int n, int k) {
vector<int> sum(n, 1), index(n, 1);
string result;
for(int i = 1; i < n; i++)
{
sum[i] = sum[i-1]*i;
index[i] = i+1;
}
k--;
for(int i = n-1; i >=0; i--)
{
int pos = k/sum[i];
result += to_string(index[pos]);
index.erase(index.begin() + pos);
k = k%sum[i];
}
return result;
}
};
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个数字让求第k个序列.n个数字总共的全排列最多有n!个,并且全排列有个规律.
给定一个n,以1开头的排列有(n-1)!个,同样对2和3也是,所以如果k小于等于(n-1)!,那么首位必为1,因为以1开头的全排列有(n-1)!个.
同样如果k大于(n-1)!,那么第一个数就应该为(k-1)/(n-1)! + 1.这样找到了首位数字应该是哪个,剩下了(n-1)个数字,我们只需要再重复上面的步骤,不断缩小k即可.
代码如下:
class Solution {
public:
string getPermutation(int n, int k) {
vector<int> sum(n, 1), index(n, 1);
string result;
for(int i = 1; i < n; i++)
{
sum[i] = sum[i-1]*i;
index[i] = i+1;
}
k--;
for(int i = n-1; i >=0; i--)
{
int pos = k/sum[i];
result += to_string(index[pos]);
index.erase(index.begin() + pos);
k = k%sum[i];
}
return result;
}
};
相关文章推荐
- 微软Word 2007数学插件 Microsoft Math 提供下载
- 关于C# Math 处理奇进偶不进的实现代码
- JavaScript Math 对象常用方法总结
- JavaScript中的Math.SQRT1_2属性使用简介
- JavaScript Math.ceil() 函数使用介绍
- 与Math.pow 相反的函数使用介绍
- JavaScript中使用指数方法Math.exp()的简介
- JavaScript使用Math.Min返回两个数中较小数的方法
- Ajax获取页面被缓存的解决方法
- JavaScript高级程序设计 阅读笔记(十二) js内置对象Math
- JavaScript中Math对象使用说明
- javascript对象之内置对象Math使用方法
- 基于java math API 的详细解释说明
- 简介JavaScript中用于处理正切的Math.tan()方法
- 浅谈JavaScript中的Math.atan()方法的使用
- PHP内置的Math函数效率测试
- 在JavaScript中使用对数Math.log()方法的教程
- JavaScript中用于四舍五入的Math.round()方法讲解
- Javascript之Math对象详解
- 简介JavaScript中Math.LOG10E属性的使用