LeetCode_Permutation Sequence

来源:互联网 发布:狼居胥山在哪 知乎 编辑:程序博客网 时间:2024/06/07 07:12

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.

string getPermutation2(int n, int k) {string ans;ans.resize(n);bool used[10];memset(used, 0, sizeof(used));// 用0到n-1代表(1,n)for (int i = n; i <= 9; ++i){used[i] = true;}int count = 1;for (int i = 1; i <= n - 1; ++i){count *= i;}int num = 0;--k;while (k){int index = k / count;int visited = 0;for (int i = 0; i < n; ++i){if (!used[i]){if (visited == index){ans[num++] = i + '0' + 1;used[i] = true;break;}else{++visited;}}}k = k % count;if (k == 0)break;count = count / (n - num);}if (num < n){for (int i = 0; i < n; ++i){if (!used[i]){ans[num++] = i + '0' + 1;}}}    return ans;}

void nextPermutation(vector<int> &num) {int size = num.size();if (size == 0)return;int i = size - 2;for (; i >= 0; --i){if (num[i] < num[i+1])break;}if (i == -1){for (int i = 0; i < (size >> 1); ++i){swap(num[i], num[size - 1 - i]);}return;}int j = size - 1;int minNum = num[i + 1];int index = i + 1;for (; j > i; --j){if (num[j] > num[i]){if (num[j] < minNum){minNum = num[j];index = j;}}}swap(num[i], num[index]);sort(num.begin() + i + 1, num.end());}


原创粉丝点击