LeetCode刷题- 60. 第k个排列
题目链接:60. 第k个排列
¶题解:
依次考虑每一位,很是巧妙的做法!
¶题目简述:
求一个序列字典序的第k个排列!
¶题解一:
直接使用全排列函数:next_permutation()
第k个序列,就是要循环k - 1
次。
时间复杂度:$O(n! \times k)$
¶AC代码一:
1 |
|
¶题解二:
计数
思路:
- 从高到低依次考虑每一位
- 对于每一位,从小到大枚举没有使用过的数,确定当前位
看下方的一个例子: n = 4, k = 10
第一位放1,后面有3!= 6种情况,放2后面也有3!= 6种情况,而k = 10,所以第一位一定是2,k = 10 - 6= 4
第二位放1,后面有2!= 2种情况,放3后面也有2!= 2种情况,而k = 4,所以第二位一定是3, k = 4 - 2 = 2
第三位放1,后面有1!= 1种情况,放4后面也有1!= 1种情况,而k = 2,所以第三位一定是4,k = 2 - 1 = 1
第四位放1,后面有1种情况,而k = 1, 所以第四位一定是1,k = 1
时间复杂度:$O(n^2)$
注意:
else
内进入后即已经找到当前为改填的数,标记为true
后直接break
!
¶AC代码二:
1 |
|
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 小牛博客!
评论