实现任意数组的全排列,结果中会有重复的,还没想到好办法可以处理。暂时想到的是去重。
#include <stdio.h>
#include <iostream>
using namespace std;
int numArray[4]={1,1,0,1};
void permutation(int *nums,int start,int end){
if (start==end)
{
/* code */
for (int i = 0; i < 4; ++i)
{
cout<<nums[i]<<",";
/* code */
}
cout<<"\n";
return;
}
permutation(nums,start+1,end);//不交换,先进行排列。
for (int i = start+1; i < end; ++i)
{
if (nums[start]==nums[i])
{
/* code */
continue;//判断数字如果相等就不用再排列了。因为两个交换位置以后还是一样的。这样书写只能减少重复的排列顺序。并不能消去。
}
int temp=0;
temp=nums[start];
nums[start]=nums[i];
nums[i]=temp;
permutation(nums,start+1,end);
temp=nums[start];
nums[start]=nums[i];
nums[i]=temp;
/* code */
}
}
int main(int argc, char const *argv[])
{
/* code */
permutation(numArray,0,4);
return 0;
}