(M)Backtracking:60. Permutation Sequence

来源:互联网 发布:淘宝开店怎样装修店铺 编辑:程序博客网 时间:2024/06/06 14:08

感觉应该算是一个找规律题,看了大神的分析才知道怎么做:

a1 = k / (n - 1)!
k1 = k

a2 = k1 / (n - 2)!
k2 = k1 % (n - 2)!
...

an-1 = kn-2 / 1!
kn-1 = kn-2 / 1!

an = kn-1 / 0!
kn = kn-1 % 0!

class Solution {public:    string getPermutation(int n, int k) {        string res;        string num = "123456789";        vector<int> f(n, 1);        for (int i = 1; i < n; ++i) f[i] = f[i - 1] * i;        --k;        for (int i = n; i >= 1; --i) {            int j = k / f[i - 1];            k %= f[i - 1];            res.push_back(num[j]);            num.erase(j, 1);        }        return res;    }};



原创粉丝点击