有两种有序排列,第一种,输入的数字无重复,第二种,输入的数字有重复,要求输出没有重复的全排列。
针对第一种,思路如下:
排列类问题想到的是递归进行处理,递归边界就是当前序列的个数等于输入序列的个数。枚举输入序列中的每一个值,如果这个值在当前序列中没有出现,则把A[cur]=vi[i],如果出现了,则跳过。
第二种:
在有重复数字的问题中,下标i应该不遗漏不重复的取到所有的vi[i],在对生成的序列去重的时候可以在for循环中加入一个条件,if(vi[i]!=vi[i-1])则可以达到效果。其次,当当前序列中的vi[i]的个数小于序列中的vi[i]个数即可进行递归调用。[1,1,1]序列
#includeusing namespace std; using gg=long long; gg n; gg vi[100]; void fun1(gg cur,gg A[])//输出从1~n的全排列,不包含重复的,比如{1,2,4},输出为6种 { if(cur==n+1) { for(int i=1;i<=n;i++) { cout<>n; for(int i=0;i >vi[i]; } gg A[100]; fun2(0,A); return 0; }



