首页 > 代码库 > leetcode - Permutation Sequence

leetcode - 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.

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

#if 0
class Solution {
public:
    std::string getPermutation(int n, int k) {
		std::string s;
		for (int i = 0; i < n; i++)
		{
			s.push_back(i+1+'0');
		}
		int cnt = 0;
		do
		{
			cnt++;

		} while (std::next_permutation(s.begin(),s.end()) && cnt < k);
#if 0
		std::cout << s << std::endl;
#endif // 1

		return s;
    }
};
#endif // The code TLE. (一般解法)

#if 1
class Solution {
public:
    std::string getPermutation(int n, int k) {
		std::vector<int> vec(n,0);
		int t = 1;
		for (int i = 0; i < n; i++)
		{
			vec[i] = i + 1;
			t *= i + 1;
		}
		std::string s;
		k--;
		for (int i = 0; i < n; i++)
		{
			t /= n - i;
			s.push_back(vec[k / t] + '0');
			vec.erase(vec.begin() + k / t);
			k %= t;
		}
#if 0
		std::cout << s << std::endl;
#endif // 1

		return s;
    }
};
#endif // 1


leetcode - Permutation Sequence