去除重复数的全排列
如下是递归实现:(还可以使用字典序实现)
//arr数组中找重复数,如果找到了就不进行交换
bool isSwap(int* arr, int from, int to) { for(int i=from;i<to;i++) { if(arr[i]==arr[to]) { return false; } } return true; } void perm(int* arr, int from, int to) { if(from==to) disp(arr, to+1); else { for(int i=from;i<=to;++i) { if(!isSwap(arr,from,i)) continue; swap(arr[i], arr[from]); perm(arr, from+1, to); swap(arr[i], arr[from]); } } }