[排列] leetcode 60 Permutation Sequence
problem:https://leetcode.com/problems/permutation-sequence
求第k个排列数。数学解法,可以找一下规律。比如对于1234的排列数,一共有24种。我们从左到右依次决定排列数是哪些。首先第一个数有4种可选的,一共有24种,那么每种就是6个,我们用 k / 6,看它落在哪个区间,就取哪个数字。
之后,还有三个数可选,因为一共有6种,所以每种有2个,我们计算k / 2……以此类推得到所有位的数字。因为k从0计数算起来更简单,所以我们一开始做k--。
class Solution { public: string getPermutation(int n, int k) { string ans; string permutation; int m = 1; for(int i = 1;i <= n;i++) { m *= i; permutation.push_back(i + '0'); } k--; for(int i = n;i > 0; i--) { m = m / i; int j = k / m; ans.push_back(permutation[j]); permutation.erase(permutation.begin() + j); k = k % m; } return ans; } };