leetcode 60. Permutation Sequence (求第k个排列)

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 _k_th permutation sequence.

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

思路:还是根据leetcode 31 解题报告 中的算法搞一下就好了。。

/* ***********************************************
Author :111qqz
Created Time :2017年04月13日 星期四 15时17分19秒
File Name :60.cpp
************************************************ */
class Solution {

public:

    void solve(vector<int>&nums)
    {
	int n = nums.size();
	if (n==0) return;
	int k = -1;
	for ( int i = n-2 ; i>= 0 ; i--)
	{
	    if (nums[i]<nums[i+1])
	    {
		k =  i;
		break;
	    }
	}
	if (k==-1)
	{
	    reverse(nums.begin(),nums.end());
	    return;
	}
	int l = -1;
	for ( int i = n-1 ; i > k ; i--)
	{
	    if (nums[k]<nums[i])
	    {
		l = i ;
		break;
	    }
	}
	swap(nums[l],nums[k]);
	reverse(nums.begin()+k+1,nums.end());
    }
    string getPermutation(int n, int k) {
	vector<int>nums;
	
	for ( int i = 1 ; i <= n ; i++) nums.push_back(i);
	for ( int i = 2 ; i <= k ; i++) solve(nums);
	
	string res = "";
	int siz = nums.size();
	for ( int i = 0 ; i < siz ; i++) res = res + char(nums[i]+'0');
	return res;

    }

};