前言:
本文旨在记录工作中遇到的一个算法问题,有参考其它地方,但已找不到出处,见谅。
问题:
有一组数组,数组个数不定,每个数组的元素个数不定,从每个数组中取一个元素组成一个新的数组,需要求出所有的可能组合。
思路:
因为数组个数及元素个数都不定,显然不能用循环,因此只能用递归实现。
代码:
#include<iostream>
#include<vector>
using namespace std;
vector<int> indexes;//全局变量用于记录从每个数组中所取元素的索引
void all_permutations(const vector<vector<int>>& vec, vector<vector<int>>& res, uint32_t level = 0);
int main()
{
vector<vector<int>> vecs = { {1,2,3}, {4,5}, {6,7}};
indexes.resize(vecs.size());
vector<vector<int>> res;
all_permutations(vecs, res);
for (auto vec : res)
{
for (auto i : vec)
{
cout << i << " ";
}
cout << endl;
}
}
void all_permutations(const vector<vector<int>>& vec, vector<vector<int>>& res, uint32_t level)
{
std::vector<int> vci;
if (level < vec.size())
{
for (size_t i = 0; i < vec[level].size(); i++)
{
indexes[level] = i;
all_permutations(vec, res, level + 1);
}
}
else
{
for (size_t i = 0; i < vec.size(); i++)
{
vci.push_back(vec[i][indexes[i]]);
}
res.push_back(vci);
}
}