只需要保证不发生2次或以上相同的交换。例如int arr[] = {1,2,3,2} 交换了0 1后就不能再交换0 3不然会重复计算,为了实现这个功能,只需要额外加一个函数,在交换0 3前判断 a[1-2]是否有等于a[3]的数 如果有 则不能交换0 3 该函数可以用judgeIsOrNotSwap()实现
bool judgeIsOrNotSwap(int* arr, int begin, int end) {
if (arr) {
if (begin == end) {
return true;
}
for (int i = begin; i < end; i++) {
if (arr[i] == arr[end]) {
return false;
}
}
return true;
}
return false;
}
void allSequence(int* arr, int len, int loc) {
if (arr && len) {
if (loc == len - 1) {
for (int i = 0; i < len; i++) {
cout << arr[i] << " ";
}
num++;
cout << endl;
}
else {
//注意for循环开始和结束位置
for (int i = loc; i < len; i++) {
if (judgeIsOrNotSwap(arr, loc, i)) {
swap(arr, i, loc);
allSequence(arr, len, loc + 1);
swap(arr, i, loc);
}
}
}
}
}