给出集合 [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
1 <= k <= n!
这道题我是按照题目要求模拟的,没有进行任何的优化,用dfs全搜出来,返回第k-1个即答案,大家可以参加一下,至少能过
先看看用时吧:
代码:
#include <bits/stdc++.h>
using namespace std;const int N = 15;int n,k;
vector<string> ans;
vector<int> arr;
bool b[N];
string s = "";void dfs(int x){if(x > k){ans.push_back(s);return ;}for(int i=0;i<n;i++){if(b[i]) continue;s += to_string(arr[i]);b[i] = true;dfs(x+1);s.pop_back();b[i] = false;}
}int main()
{cin >> n >> k;for(int i=1;i<=n;i++){arr.push_back(i);}dfs(1);int m = ans.size();// for(int i=0;i<m;i++){// cout << ans[i] << " ";// }cout << ans[k-1] << endl;return 0;
}
加油呗