60. Permutation Sequence

来源:互联网 发布:部落冲突野猪数据大全 编辑:程序博客网 时间:2024/06/07 06:32

题目:

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):

“123” “132” “213” “231” “312” “321” Given n and k, return the kth
permutation sequence.

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

解题思路

  1. n个数字有n!种全排列 所以求第k个 就是要求 第 k%n! 个;
  2. 而 每种数字开头的排列有 n!/n = (n-1)!个 所以,k/(n-1)! 可以获得 第k个全排列是以第几个数开头的。
  3. 同理 用k%(n-1)! 可以得到第K个全排列是以某个数字开头的 全排列中的第 几个;
  4. 重复上述的问题
class Solution{public:    string getPermutation(int n, int k) {        k--; //差点忘记了k=1时是不用处理的        vector<int> nums;        int round =1;         for(int i=1;i<=n;i++){            nums.push_back(i);            round =round * i; //n!         }        string res;  //输出        int cur_digit=n; //当前处理的位数        while(cur_digit>0){             round =round/cur_digit; // 每种数字开头的排列有 n!/n = (n-1)!个            int index =k/round;   //k/(n-1)! 以第几个数开头            k= k%round;            res+=(nums[index]+'0'); //将第cur_digit位 存入res            nums.erase(nums.begin()+index);              cur_digit --; //下一位        }        return res;    }};
原创粉丝点击