1.leetcode47
题目:
给定一个可包含重复数字的序列,返回所有不重复的全排列。
示例:
输入:[1,1,2]输出:[ [1,1,2], [1,2,1], [2,1,1]]
太菜了,这种题都是有固定模吧的,但是在细节上处理不好所以就写不对。这里的防止重复是先数组排序,然后重复的就跳过去。
public List<List<Integer>> permuteUnique(int[] nums) {
Arrays.sort(nums);
//List<List<Integer>>list=new ArrayList<List<Integer>>();
List<List<Integer>>list=new ArrayList<List<Integer>>();
boolean tg[]=new boolean[nums.length];
Solve(list,nums,tg,new ArrayList<Integer>());
return list;
}
private void Solve( List<List<Integer>>list,int[]nums,boolean[]tg,List<Integer>tmp){
//System.out.println(tmp.size());
if(tmp.size()==nums.length){
list.add(new ArrayList<Integer>(tmp));
return;
}
for(int i=0;i<nums.length;i++){
if(tg[i] || i > 0 && !tg[i-1] && nums[i] == nums[i-1]) continue;
tmp.add(nums[i]);
// System.out.println(nums[i]);
tg[i]=true;
Solve(list,nums,tg,tmp);
tg[i]=false;
tmp.remove(tmp.size()-1);//之前这句没加上就导致结果很奇怪。
}
}
网友评论