我已经看到了一些如何做到这一点的例子,例如:
void permutation(char * arr, int curr, int size)
{
if(curr == size-1)
{
for(int a=0; a<size; a++)
cout << arr[a] << "\t";
cout << endl;
}
else
{
for(int i=curr; i<size; i++)
{
swap(&arr[curr], &arr[i]);
permutation(arr, curr+1, size);
swap(&arr[curr], &arr[i]);
}
}
}
但是,我试图创建一个只接受排列函数的数组,大小和ostream输出的函数....例如:
void Permutations(int * items,const int&amp; size,ostream&amp; out)
我无法用大小来解决如何做到这一点,究竟会怎样做呢?
答案 0 :(得分:0)
这背后的想法是用最后一个字符交换每个字符,然后在同一个字符串上再次调用排列,但是大小小于1.因为我们正在使用size参数来跟踪我们正在处理的子串的大小,arr被空终止。如果需要,您可以轻松地将函数更改为具有额外的ostream参数。
大小值在开始时更改,而不是在新调用时更改,以允许优雅的sizeof(str)语法。
unsigned char a[16] = {[0 ... 15] = 0x20};