LeetCode之Permutation Sequence

来源:互联网 发布:数据迁移工具有哪些 编辑:程序博客网 时间:2024/06/03 16:31
/*这道题的最直观想法是采用计数的方法,先确定第一个数字,同样不断地确定后面的数字即可。思路如下:1.排除第一个数后,其他n-1个数共有(n-1)!个排列;2.因此,所求排列的第一个数下标为(k-1)/((n-1)!);  //下标从0开始,而k从1开始,所以为(k-1)3.删除确定的第一个元素,接下来求第(k-1)%((n-1)!)个排列。4.重复1~3,直到n个元素都已经确定。参考自:http://www.cnblogs.com/TenosDoIt/p/3721918.html*/class Solution {public:    string getPermutation(int n, int k) {        string str("123456789");        string s(str.substr(0, n));        string res(n, ' ');        for(int i = 0; i < n; ++i){            res[i] = getNextChar(s, k);        }        return res;    }        char getNextChar(string& s, int& k){        int fac = factorial(s.size() - 1);        int idx = (k-1) / fac;        char res = s[idx];        k -= idx*fac;        s.erase(idx, 1);        return res;    }        int factorial(int n){        int res(1);        for(int i = 2; i <= n; ++i){            res *= i;        }        return res;    }};

0 0
原创粉丝点击