## Sunday, April 7, 2013

### [LeetCode] Permutation Sequence, Solution

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.
» Solve this problem

[Thoughts]

a1, a2, a3, .....   ..., an

a2, a3, .... .... an, 共计n-1个元素。 n-1个元素共有(n-1)!组排列，那么这里就可以知道

a1 = K1 / (n-1)!

a2 = K2 / (n-2)!
K2 = K1 % (n-1)!
.......
a(n-1) = K(n-1) / 1!
K(n-1) = K(n-2) /2!

an = K(n-1)

``````1:       string getPermutation(int n, int k) {
2:            vector<int> nums(n);
3:            int permCount =1;
4:            for(int i =0; i< n; i++)
5:            {
6:                 nums[i] = i+1;
7:                 permCount *= (i+1);
8:            }
9:            // change K from (1,n) to (0, n-1) to accord to index
10:            k--;
11:            string targetNum;
12:            for(int i =0; i< n; i++)
13:            {
14:                 permCount = permCount/ (n-i);
15:                 int choosed = k / permCount;
16:                 targetNum.push_back(nums[choosed] + '0');
17:                 //restruct nums since one num has been picked
18:                 for(int j =choosed; j< n-i; j++)
19:                 {
20:                      nums[j]=nums[j+1];
21:                 }
22:                 k = k%permCount;
23:            }
24:            return targetNum;
25:       }
``````