using System;
using System.Collections.Generic;
class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param num int整型一维数组
* @return int整型二维数组
*/
public bool[] visited;
public List<List<int>> ans=new List<List<int>>();
public List<List<int>> permuteUnique (List<int> num) {
// write code here
visited=new bool[num.Count];
num.Sort();
func(num,new List<int>());
return ans;
}
public void func(List<int> num,List<int> vec){
if(vec.Count==num.Count)
{
ans.Add(new List<int>(vec));
return;
}
for(int i=0;i<num.Count;i++)
{
if(visited[i])
continue;
if(i>0 && num[i]==num[i-1] && !visited[i-1])
continue;
vec.Add(num[i]);
visited[i]=true;
//继续寻找下一i个数
func(num,vec);
//将上次全排列的结果在,最后一个数移除掉
vec.RemoveAt(vec.Count-1);
//移除掉的数字设为未访问
visited[i]=false;
}
}
}
建议先做
建议先做,不包含重复版的,然后在理解本问题。两个关键点
1.要对数组进行排序
2.for循环中如何避免两个数字有重复,比如 1 1 2,第一个1 正常遍历,遍历第二个1时,发现和前面的数字相等,且前面的1标记为false,那么就满足直接跳过的请求



京公网安备 11010502036488号