难度:困难。
标签:数学,回溯算法。
我的思路:
不适用回溯,直接循环出答案。
第
i
(
1
<
=
i
<
=
n
)
i(1<= i<=n)
i(1<=i<=n)个数字就使用
(
n
−
i
)
!
(n-i)!
(n−i)!来得出数字是多少,具体思路见代码。
正确解法:
class Solution {
public:
string getPermutation(int n, int k) {
if(n == 1)return "1";
vector<int> nums(n);
nums[0] = 1;
for(int i = 1; i < n; i++){
nums[i] = nums[i - 1] *(i + 1);
}
vector<char> temp(n);
for(int i = 0; i < n; i++)temp[i] = i + 1 + '0';
k--;
string result = "";
while(k >= 0 && n >= 2){
int m = k / nums[n - 2];
result += temp[m];
temp.erase(temp.begin() + m);
k -= m *nums[n - 2];
n--;
}
result += temp[0];
return result;
}
};
结果: