[leetcode 刷题系列]Permutation Sequence

- - 利用permutation的性质模拟就好了


class Solution {
    int fib(int x){
        int ret = 1;
        for(int i = 1; i <=x; ++ i)
            ret = ret * i;
        return ret;
    }
    void dfs(int n, int* ans, bool* flag, int now_n, int k){
        if(now_n <= 0)
            return ;
        int now = 0;
        for(int i = 1; i <= n; ++ i)
            if(!flag[i]){
                now ++ ;
                if(now * fib(now_n - 1) >= k){
                    ans[n - now_n + 1] = i;
                    flag[i] = true;
                    dfs(n, ans, flag, now_n - 1, k - (now - 1) * fib(now_n - 1));
                    break;
                }
            }
    }
public:
    string getPermutation(int n, int k) {
        // Start typing your C/C++ solution below
        // DO NOT write int main() function
        int ans[n + 1];
        bool flag[n + 1];
        memset(flag, 0x00, sizeof(flag));
        dfs(n, ans, flag, n, k);
        string ret = "";
        for(int i = 1; i <= n; ++ i)
            ret += '0' + ans[i];
        return ret;
    }
};


你可能感兴趣的:([leetcode 刷题系列]Permutation Sequence)