标签: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