C++STL之next_permutation使用
這是一個計算排列組合的函數
next_permutaion 下一個排列
生成一個字典序更大的排列
Rearranges the elements in the range [first,last) into the next lexicographically greater permutation.
返回值是bool型
如果仍然可以找到字典序更大的排列,則返回true,并且數組(假定是數組)中變成一個新的排列,比如{2,1,3};如果不能再找到一個字典序更大的排列就返回false,而且數組還是最小的那個排列,比如{1,2,3}。
If the function can determine the next higher permutation, it rearranges the elements as such and returns true. If that was not possible (because it is already at the largest possible permutation), it rearranges the elements according to the first permutation (sorted in ascending order) and returns false.
Return value
true if the function could rearrange the object as a lexicographicaly greater permutation.
Otherwise, the function returns false to indicate that the arrangement is not greater than the previous, but the lowest possible (sorted in ascending order).
resource:https://www.cplusplus.com/reference/algorithm/next_permutation/?kw=next_permutation
Cplusplus官網給出的例程
// next_permutation example #include <iostream> // std::cout #include <algorithm> // std::next_permutation, std::sortint main () {int myints[] = {1,2,3};std::sort (myints,myints+3);std::cout << "The 3! possible permutations with 3 elements:\n";do {std::cout << myints[0] << ' ' << myints[1] << ' ' << myints[2] << '\n';} while ( std::next_permutation(myints,myints+3) );std::cout << "After loop: " << myints[0] << ' ' << myints[1] << ' ' << myints[2] << '\n';return 0; }輸出結果
The 3! possible permutations with 3 elements:
1 2 3
1 3 2
2 1 3
2 3 1
3 1 2
3 2 1
After loop: 1 2 3
分析
這里使用next_permutation之前使用sort函數對數組進行排序,以便返回所有的排列。
Leetcode46. 全排列
題目鏈接:https://leetcode-cn.com/problems/permutations/
給定一個 沒有重復 數字的序列,返回其所有可能的全排列。
示例:
輸入: [1,2,3]
輸出:
[
[1,2,3],
[1,3,2],
[2,1,3],
[2,3,1],
[3,1,2],
[3,2,1]
]
分析
由于沒有重復數字,這樣的排列可以直接使用STL中的next_permutation函數,輸出是按照升序輸出。
同樣需要注意的是:這里使用next_permutation之前使用sort函數對數組進行排序,以便返回所有的排列。
如果next_permutation 為真,則把此時的nums數組中的元素添加到tmp數組中,直到找到所有的排列。
AC代碼
一道題目
1、題目描述
Ray又對數字的列產生了興趣:
現有四張卡片,用這四張卡片能排列出很多不同的4位數,要求按從小到大的順序輸出這些4位數。
輸入
輸入一組數據,包含四個整數,代表四張卡片上的數字(0<=數字<=9)
輸出
按從小到大的順序輸出所有能由這四張卡片組成的4位數,千位數字相同的在同一行,同一行中每個四位數間用空格分隔。(注意:行末不得有多余的空格和換行)并且不能有前導零
樣例輸入
1 1 2 3
樣例輸出
1123 1132 1213 1231 1312 1321
2113 2131 2311
3112 3121 3211
分析
使用一個tmp來保存最高位,方便換行。
另外需要一個cnt來判斷是否是每一行的第一個排列。
總結
以上是生活随笔為你收集整理的C++STL之next_permutation使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C++归并排序递归写法
- 下一篇: 外地买了公租房能申请北京公租房吗