LeetCode--Permutation Sequence
来源:互联网 发布:淘宝店怎么打造爆款 编辑:程序博客网 时间:2024/06/16 03:32
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.
思路:暴力搜索法。
之前写过一个nextPermutation的题目,这里可以直接调用k-1次即可,甚至可以直接调用C++中STL自带的函数next_permutation(s.begin(),s.end()).
还有一种效率更高的康托编码,很神奇,可以直接找到答案,不用搜索所有情况。
class Solution {public: string getPermutation(int n, int k) { string s(n,'0'); for(int i=0;i<n;i++) s[i]+=i+1; for(int i=0;i<k-1;i++) nextPermutation(s); return s; } void nextPermutation(string &nums) { int k=-1,n=nums.size(); for(int i=n-2;i>=0;i--){ if(nums[i]<nums[i+1]){ k=i; break; } } if(k==-1){ reverse(nums.begin(),nums.end()); return; } int l=-1; for(int i=n-1;i>k;i--){ if(nums[i]>nums[k]){ l=i; break; } } swap(nums[k],nums[l]); reverse(nums.begin()+k+1,nums.end()); }};
class Solution {public: string getPermutation(int n, int k) { string s(n,'0'); string result; for(int i=0;i<n;i++) s[i]+=i+1; return kth_permutation(s,k); }private: int factorial(int n) { int result=1; for(int i=1;i<=n;i++) { result*=i; } return result; } string kth_permutation(string seq,int k) { int n=seq.size(); string S=seq; string result; int base=factorial(n-1); k--; for(int i=n-1;i>0;k%=base,base/=i,i--) { result.push_back(S[k/base]); string::iterator a=S.begin()+k/base; S.erase(a); } result.push_back(S[0]); return result; }};
阅读全文
0 0
- LeetCode: Permutation Sequence
- LeetCode Permutation Sequence
- [Leetcode] Permutation Sequence
- [LeetCode] Permutation Sequence
- leetcode 74: Permutation Sequence
- leetcode Permutation Sequence
- [leetcode] Permutation Sequence
- [LeetCode]Permutation Sequence
- LeetCode:Permutation Sequence
- LeetCode-Permutation SequencePermutation Sequence
- [leetcode] Permutation Sequence
- LeetCode - Permutation Sequence
- LeetCode:Permutation Sequence
- LeetCode 60: Permutation Sequence
- Leetcode: Permutation Sequence
- leetcode Permutation Sequence
- LeetCode | Permutation Sequence
- LeetCode Permutation Sequence
- Android 4.1 Netd 详细分析系列
- 入门赛7
- MySQL(五)之DDL(数据定义语言)与六大约束
- deferred对象详细解读
- cookie和session的联系和区别
- LeetCode--Permutation Sequence
- React Native
- C# 单例设计模式
- 数据结构与算法
- 51Nod 1298 圆与三角形
- Java中理解IO工作原理示意图
- 【Java】虚拟机执行引擎
- 盲评的办法
- WOJ1296-Coins