Permutation Sequence
来源:互联网 发布:修真的电脑程序员txt 编辑:程序博客网 时间:2024/06/08 18:38
[1]可以用递归遍历所有可能的排列 然后找出第k个。这样时间复杂度会很高.
仔细想一下可以找到一下规律:
n个数的的第k个排列为:
a1, a2, a3,...an;
接下来我们一个一个数的选取,如何确定第一个数应该是哪一个呢?选取第一个数后剩下全排列的个数为(n-1)! 所以选取的第一个数应该为第
K1 = k;
a1 = K1/(n-1)!位数字
同理当选完a1后只剩下n-1个数字,在确定第二个数应该选择哪个.
a2 = K2 / (n-2)!
K2 = K1 % (n-1)!
........
a(n-1) = K(n-1) / 1!
K(n-1) = k(n-2) % 2!
仔细想一下可以找到一下规律:
n个数的的第k个排列为:
a1, a2, a3,...an;
接下来我们一个一个数的选取,如何确定第一个数应该是哪一个呢?选取第一个数后剩下全排列的个数为(n-1)! 所以选取的第一个数应该为第
K1 = k;
a1 = K1/(n-1)!位数字
同理当选完a1后只剩下n-1个数字,在确定第二个数应该选择哪个.
a2 = K2 / (n-2)!
K2 = K1 % (n-1)!
........
a(n-1) = K(n-1) / 1!
K(n-1) = k(n-2) % 2!
an = K(n-1)
class Solution { public: string getPermutation(int n, int k) { int sum=1; vector<int> num(n, 0); string ret; for(int i=0;i<n;i++) { num[i]=i+1; sum*=i+1; } k--; for(int i=0;i<n;i++) { sum/=n-i; int cur=k/sum; ret.push_back(num[cur]+'0'); for(int j=cur;j<n-1-i;j++) num[j]=num[j+1]; k%=sum; } return ret; }};
参考:
[1] http://blog.csdn.net/lqcsp/article/details/23322951
0 0
- Permutation Sequence
- Permutation Sequence
- Permutation Sequence
- Permutation Sequence
- Permutation Sequence
- Permutation Sequence
- Permutation Sequence
- Permutation Sequence
- Permutation Sequence
- Permutation Sequence
- Permutation Sequence
- Permutation Sequence
- Permutation Sequence
- Permutation Sequence
- Permutation Sequence
- Permutation Sequence
- Permutation Sequence
- Permutation Sequence
- hdu2011 多项式求和
- 第三周工作总结——IBeacon协议分析
- hive Version information not found 错误解决办法
- adt -bundle
- 四子连棋
- Permutation Sequence
- 隐马尔可夫模型的学习
- matlab中repmat函数的用法
- 用crosstool创建交叉编译环境
- POJ1258 基础最小生成树
- QT 按钮(4种样式)
- poj2118~Firepersons
- HDU1425_sort
- Ubuntu下搭建Android开发环境