标签:tor 字符 site not bre string leetcode lse div
class Solution {
public:
void dfs(int n,string tmp,vector<bool>&visited,vector<string>& res){
if(tmp.size()==n) res.push_back(tmp);
for(int i=1;i<=n;i++){
if(visited[i]) continue;
visited[i]=true;
dfs(n,tmp+to_string(i),visited,res);
visited[i]=false;
}
}
string getPermutation(int n, int k) {
vector<string>res;
vector<bool>visited(n,false);
string s="";
dfs(n,s,visited,res);
sort(res.begin(),res.end());
return res[k-1];
}
};
想到上一次做的https://www.cnblogs.com/xiaobaituyun/p/10581093.html这道题,可以不停的得到下一个排列组合,一直得到第k个。
这种做法采用了c++的内置函数next_permutation。
class Solution {
public:
string getPermutation(int n, int k) {
string res="";
for(int i=1;i<=n;i++) res=res+to_string(i);
for(int i=1;i<k;i++) next_permutation(res.begin(),res.end());
return res;
}
};
不用C++的内置函数:
class Solution {
public:
void nextPermutation(string &str){
int i=str.size()-1;
for(;i>0;i--){
if(str[i-1]<str[i]) break;
}
if(i==0) sort(str.begin(),str.end());
for(int j=str.size()-1;j>=i;j--){
if(str[j]>str[i-1]){
swap(str[i-1],str[j]);
break;
}
}
sort(str.begin()+i,str.end());
}
string getPermutation(int n, int k) {
string res="";
for(int i=1;i<=n;i++) res=res+to_string(i);
for(int i=1;i<k;i++){
nextPermutation(res);
}
return res;
}
};
leetcode [60] Permutation Sequence
标签:tor 字符 site not bre string leetcode lse div
原文地址:https://www.cnblogs.com/xiaobaituyun/p/10619465.html