这是一个类,所以请不要太具体,但我正在寻找一种方法来列出数字数组的所有排列。
我们必须在不同的柱子(如锁)上排列不同的数字来解锁密码。4根柱子上可能有6个数字。但它应该适用于 r 上的任何 n,只要 n>r。
我有办法随机生成组合,并有条不紊地在列表中查找它,但我无法生成生成所有排列的算法。
我可以在 C++ 中使用它来获得数字 1-6 的所有组合:
//n = number of digits - 1; list = list of digits to work with;
//number=finalized list of digits
void permute(int n, vector<int> list, vector<vector<int>>* number)
{
if(n==1)
{
number->push_back(list);
}else
{
for(int i = 1;i<n;i++)
{
permute(n-1,list, number);
if(n%2 == 0)
{
swap(list[1],list[n]);
}else
{
swap(list[i],list[n]);
}
}
}
};
但是然后我得到一个列表,例如 123456 163452 等,其中 1 始终是第一个数字,但我还需要在第一个数字切换并且只有 4 个数字存在时获得。
例子
6341
4163
等等,其中有 4 位数字,范围为 1-6,并且您拥有所有可能的组合。
谁能指出我正确的方向,以另一种算法来补充这个左右?