国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

LeetCode 60. Permutation Sequence

2019-11-14 09:27:01
字體:
供稿:網(wǎng)友

描述 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):

“123” “132” “213” “231” “312” “321” Given n and k, return the kth permutation sequence.

Note: Given n will be between 1 and 9 inclusive.

分析 簡單的,可以用暴力枚舉法,調(diào)用 k ? 1 次 next_permutation()。 暴力枚舉法把前 k 個排列都求出來了,比較浪費,而我們只需要第 k 個排列。

利用康托編碼的思路,稍后細(xì)述。

代碼

class Solution {public: string getPermutation(int n, int k) { string s(n, '0'); for (int i = 0; i < n; ++i) s[i] += i + 1; for (int i = 0; i < k - 1; ++i) next_permutation(s.begin(), s.end()); return s; } template<typename BidiIt> bool next_permutation(BidiIt first, BidiIt last) { // Get a reversed range to simplify reversed traversal. const auto rfirst = reverse_iterator<BidiIt>(last); const auto rlast = reverse_iterator<BidiIt>(first); // Begin from the second last element to the first element. auto pivot = next(rfirst); // Find `pivot`, which is the first element that is no less than its // successor. `PRev` is used since `pivort` is a `reversed_iterator`. while (pivot != rlast && *pivot >= *prev(pivot)) ++pivot; // No such elemenet found, current sequence is already the largest // permutation, then rearrange to the first permutation and return false. if (pivot == rlast) { reverse(rfirst, rlast); return false; } // Scan from right to left, find the first element that is greater than // `pivot`. auto change = find_if(rfirst, pivot, bind1st(less<int>(), *pivot)); swap(*change, *pivot); reverse(rfirst, pivot); return true; }};
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 胶州市| 南昌市| 吴堡县| 原阳县| 迭部县| 南阳市| 子洲县| 泸州市| 象州县| 巫山县| 衡山县| 阳信县| 新巴尔虎左旗| 洛扎县| 农安县| 教育| 八宿县| 浙江省| 固安县| 绥芬河市| 剑川县| 土默特右旗| 兰溪市| 江都市| 永清县| 封丘县| 志丹县| 白河县| 墨脱县| 荆门市| 齐河县| 富锦市| 安达市| 武安市| 罗甸县| 卢湾区| 包头市| 凌源市| 金华市| 巴马| 满洲里市|