- 排列序列
给出集合 [1,2,3,…,n],其所有元素共有 n! 种排列。
按大小顺序列出所有排列情况,并一一标记,当 n = 3 时, 所有排列如下:
“123”
“132”
“213”
“231”
“312”
“321”
给定 n 和 k,返回第 k 个排列。
示例 1:
输入:n = 3, k = 3
输出:“213”
示例 2:
输入:n = 4, k = 9
输出:“2314”
示例 3:
输入:n = 3, k = 1
输出:“123”
提示:
1 <= n <= 9
class Solution {
vector<string> result;
string path;
void BackTracking(vector<char>& nums,vector<bool>& used,int k)
{
if(result.size()==k)
return;
if(path.size()==nums.size())
{
result.push_back(path);
return;
}
for(int i=0;i<nums.size();i++)
{
if(used[i]==true)
continue;
path=path+nums[i];
used[i]=true;
BackTracking(nums,used,k);
path.pop_back();
used[i]=false;
}
}
int atoi(string str)
{
int result=0;
for(int i=0;i<str.size();i++)
{
result=result*10+str[i]-'0';
}
return result;
}
public:
string getPermutation(int n, int k) {
vector<char> nums;
vector<bool> used(n,false);
for(int i=1;i<=n;i++)
{
nums.push_back('0'+i);
}
BackTracking(nums,used,k);
return result[k-1];
}
};