本文共 2202 字,大约阅读时间需要 7 分钟。
要解决生成所有可能排列的问题,我们可以使用C++ STL中的next_permutation函数。以下是实现步骤:
next_permutation函数包含必要的头文件:
vector和algorithm头文件。定义命名空间:
namespace ns {来定义命名空间。实现next_permutation仿射函数:
false。创建解决方案类:
Solution类。permute方法,该方法接受一个向量作为输入。do-while循环,调用next_permutation函数,直到无法生成下一个排列。主函数:
v,包含需要排列的数字。Solution对象。permute方法,获取所有排列。包含必要的头文件:
vector、algorithm和iostream头文件。定义递归函数:
dfs递归函数,用于生成所有排列。实现permute方法:
dfs函数,生成所有排列,并将其添加到结果向量中。主函数:
v,包含需要排列的数字。Solution对象。permute方法,获取所有排列。#include#include #include using std::vector;using namespace std;namespace ns { template bool next_permutation(BidirectionalIterator first, BidirectionalIterator last) { if (first == last) return false; BidirectionalIterator i = last; if (--i == first) return false; while (i != first) { auto t = i; --i; if (*i < *t) { auto j = last; while (!(*--j > *i)) ; iter_swap(i, j); reverse(t, last); return true; } } reverse(first, last); return false; } class Solution { public: vector permute(vector & nums) { sort(nums.begin(), nums.end()); vector res; do { res.push_back(nums); } while (next_permutation(nums.begin(), nums.end())); return res; } }; int main() { vector v{1,2,3}; vector res; Solution s; res = s.permute(v); for (int i = 0; i < res.size(); ++i) { for (int j : res[i]) { cout << j; if (!j || j == 3) cout << endl; } } return 0; }}
false。do-while循环,调用next_permutation函数,生成所有排列,并将每个排列添加到结果向量中。通过以上方法,可以轻松生成所有可能的排列,满足不同场景的需求。
转载地址:http://bmvfk.baihongyu.com/