60. Permutation Sequence 题解

60. Permutation Sequence题解


题目描述:


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.



题目链接:60. Permutation Sequence



算法描述:

      

      由题意知:给定参数 n 和 k,构建一个从 1 到 n 的组合(组合示例如题目所述,组合的顺序要求从小到大)。最后返回第 k 个组合。 


      首先,构建一个数组 v=[1,2,3,……,n] ,我们需要确定第 k 个组合数是什么,这个组合数是由从1到 n,n 个数组合而来,因此需要确定每一位上的数。我们按照从高位到低位的顺序进行确定:ind = (k-1) / func (n-1),ind 表示数组 v 的索引,func 函数用于返回输入参数的阶乘(表示有多少个组合数),通过这样的方法,我们可以得到最高位数。


       之后我们需要对 k 和 v 进行更新以便进入下一次循环得到第二位数,k -= ind * func (n-1) 表示下一次用于计算的 k (因为在数组 v 中我们已经提取出了一位数,我们需要根据之前的 ind 索引来确定新的 k ,func (n-1) 表示 n-1 个数的组合)。


      最后要对数组 v 进行更新,将取走的那个数用它之后位置的元素代替。



代码:

class Solution {
public:
    string getPermutation(int n, int k) {
        vector v(n);
        for(int i=0; i





你可能感兴趣的:(60. Permutation Sequence 题解)