给定一个可包含重复数字的序列 nums
,按任意顺序 返回所有不重复的全排列。
示例 1:
输入:nums = [1,1,2] 输出: [[1,1,2], [1,2,1], [2,1,1]]
这道题目和46.全排列 (opens new window)的区别在与给定一个可包含重复数字的序列,要返回所有不重复的全排列。
这里又涉及到去重了。
#include <stdio.h>
#include <stdlib.h>
#include "string.h"
int path[100];
int top=0;
int visited[100];
void dfs(int nums[],int numSize,int visited[])
{
if (top==numSize){
for (int i = 0; i < top; ++i) {
printf("%d ", path[i]);
}
printf("\n");
return;
}
for (int i = 0; i < numSize; ++i) {
if (visited[i] || (i!=0 && nums[i]==nums[i-1] && visited[i-1]==0))
continue;
visited[i]=1;
path[top++] = nums[i];
dfs(nums,numSize,visited);
top--;
visited[i]=0;
}
}
int main()
{
int nums[5]={1,2,3,4,5};
for (int i = 0; i < 5; ++i) {
visited[i]=0;
}
dfs(nums,5,visited);
return 0;
}