lintcode388. 第k个排列

亦凉 2023-07-07 12:55 30阅读 0赞

给定 n 和 k,求n的全排列中字典序第k个排列.

  1. 样例
  2. 样例 1:
  3. 输入: n = 3, k = 4
  4. 输出: "231"
  5. 解释:
  6. n = 3时, 全排列如下:
  7. "123", "132", "213", "231", "312", "321"
  8. 样例 2:
  9. 输入: n = 1, k = 1
  10. 输出: "1"
  11. 挑战
  12. O(n*k)很容易, 你可以做到O(n^2n
  13. 2
  14. ​​ )或更低的时间复杂度吗?
  15. 注意事项
  16. 1 n 9
  17. class Solution {
  18. public:
  19. /**
  20. * @param n: n
  21. * @param k: the k th permutation
  22. * @return: return the k-th permutation
  23. */
  24. string getPermutation(int n, int k) {
  25. // write your code here
  26. string start="123456789";
  27. string res="";
  28. vector<int> factor(n,1);
  29. for (int i = 1; i < n; i++) {
  30. factor[i]=factor[i-1]*i;
  31. }
  32. k--;
  33. for (int i = n; i >= 1 ; i--) {
  34. int index=k/factor[i-1];
  35. k%=factor[i-1];
  36. res.push_back(start[index]);
  37. start.erase(index,1);
  38. }
  39. return res;
  40. }
  41. };

发表评论

表情:
评论列表 (有 0 条评论,30人围观)

还没有评论,来说两句吧...

相关阅读