- 分析
使用回溯模拟排列,使用一个变量th来判断时候到达第k个最小的数。在做选择的条件那注意不能用find,否则会超时。 - 代码
class Solution {
public:
int th;
string ans;
string getPermutation(int n, int k) {
string s;
vector<bool> vec(9, false);
this -> th = 0;
backtrack(n, k, s, vec);
return ans;
}
bool backtrack(int n, int k, string& s, vector<bool>& vec){
if(s.length() == n){
if(++th == k){
ans = s;
return true;
}
}
for(char c = '1'; c <= '1' + n - 1; c++){
if(vec[c - '1']) continue;
s.push_back(c);
vec[c - '1'] = true;
if(backtrack(n, k, s, vec)) return true;
s.pop_back();
vec[c - '1'] = false;
}
return false;
}
};