LeetCode(60) Permutation Sequence

来源:互联网 发布:人工智能权威期刊 编辑:程序博客网 时间:2024/05/01 23:24

减一法

class Solution {public:    int factorial(int n) {        int result = 1;        int i = 1;        while(i <= n)            result = result * (i++);        return result;    }    void minusOneAndConquer(vector<int> &nums, int k, string &result) {        if(1 == nums.size()) {            result += std::to_string(nums[0]);            return;        }        int step = factorial(nums.size() - 1);        int i = 1;        while(true) {            if(k >= (i - 1) * step + 1 && k <= i * step)                break;            i++;        }        result += std::to_string(nums[i - 1]);        nums.erase(nums.begin() + i - 1);        minusOneAndConquer(nums, k - (i - 1) * step, result);    }    string getPermutation(int n, int k) {        string result;        vector<int> nums;        for(int i = 1; i <= n; i++)            nums.push_back(i);        minusOneAndConquer(nums, k, result);        return result;    }};
0 0
原创粉丝点击