您的位置:首页 > 编程语言 > Java开发

leetCode练习(47)

2016-09-30 19:38 302 查看
题目:Permutations II

难度:medium

问题描述:

Given a collection of numbers that might contain duplicates, return all possible unique permutations.

For example,
[1,1,2]
have the following unique permutations:

[
[1,1,2],
[1,2,1],
[2,1,1]
]


解题思路:
与47题基本相同,只是多了在回溯时,需要跳过重复的元素。具体不同操作已经注释出,代码如下:

public class Solution {
ArrayList<List<Integer>> list=new ArrayList<List<Integer>>();
public List<List<Integer>> permuteUnique(int[] nums) {
if (nums==null) return list;
Arrays.sort(nums);
diedai(nums,new ArrayList<Integer>(),nums.length);
return list;
}
public void diedai(int[]nums,ArrayList<Integer> templist,int overstep){
int[] temp=nums.clone();
int t;
if(overstep==0){
list.add(templist);
}

for(int i=0;i<temp.length;i++){
t=temp[i];
if(i>0&&temp[i]==temp[i-1]){ //与46题不同之处,需要先将nums进行排队,然后,将重复的跳过。
continue;
}
if(temp[i]==Integer.MAX_VALUE){
continue;
}else{
ArrayList<Integer> copylist=(ArrayList<Integer>)templist.clone();
copylist.add(temp[i]);
temp[i]=Integer.MAX_VALUE;
diedai(temp,copylist,overstep-1);
temp[i]=t;
}
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java leetcode 回溯法