[leetcode] Permutation Sequence

来源:互联网 发布:自己没货如何开淘宝店 编辑:程序博客网 时间:2024/05/01 06:23

The set [1,2,3,…,n] contains a total of n! unique permutations.

By listing and labeling all of the permutations in order,
We get the following sequence (ie, for n = 3):

  1. "123"
  2. "132"
  3. "213"
  4. "231"
  5. "312"
  6. "321"

Given n and k, return the kth permutation sequence.

Note: Given n will be between 1 and 9 inclusive.

第一个数的规律就是s[ (k-1)/(n-1)! ]
k的变化为 k = (k-1) % Factorial(n-1) + 1
好多k - 1很不爽,所以直接先k--,再做下面的

我第一次写居然用了递归@@ 弱爆了,直接一个while就可以了
class Solution {public:    int Factorial(int x) {        return (x == 1 ? x : x * Factorial(x - 1));    }    string getPermutation(int n, int k) {        // Start typing your C/C++ solution below        // DO NOT write int main() function        string s(n,'1');        for(int i = 1; i <= n; i++){            s[i-1] = '0' + i;        }                k--;        //if(n == 1 || k == 0) return s;                string ret;        int idx;        while(s.size() > 1){            n = s.size();            idx = k / Factorial(n-1);            ret.push_back(s[idx]);            s.erase(s.begin() + idx);            k = k % Factorial(n-1);                    }                ret.push_back(s[0]);                return ret;            }};



原创粉丝点击