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

Leetcode-47. Permutations II

2016-10-04 16:52 295 查看
前言:为了后续的实习面试,开始疯狂刷题,非常欢迎志同道合的朋友一起交流。因为时间比较紧张,目前的规划是先过一遍,写出能想到的最优算法,第二遍再考虑最优或者较优的方法。如有错误欢迎指正。博主首发CSDN,mcf171专栏。

博客链接:mcf171的博客

——————————————————————————————
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]
]

这个题目其实就是稍微加大了一下46题的难度,主要是46写的不够鲁棒,结果47还要修改,应该47的能直接到46用。修改的地方就是每次递归的时候判断一下当前处理的值和 前一个是否相同,相同则跳过。Your
runtime beats 32.19% of java submissions.

public class Solution {
public List<List<Integer>> permuteUnique(int[] nums) {

if(nums.length == 0) return new ArrayList<List<Integer>>();
List<List<Integer>> results = new ArrayList<List<Integer>>();
List<Integer> result = new ArrayList<Integer>();
if(nums.length == 1){
result.add(nums[0]);
results.add(result);
return results;
}
Arrays.sort(nums);
List<Integer> stores = new ArrayList<Integer>();
for(int num : nums) stores.add(num);
generateNext(stores,result,results);

return results;

}

public void generateNext(List<Integer> stores,List<Integer> result, List<List<Integer>> results){

int length = stores.size();
if(length == 1) {
result.add(stores.get(0));
results.add(new ArrayList<Integer>(result));
result.remove(result.size() - 1);
}
else{
for(int i = 0 ; i < length ; i ++){
if( i == 0 || stores.get(i) != stores .get(i-1)){
int number = stores.get(i);
result.add(number);
stores.remove(i);
generateNext(new ArrayList<Integer>(stores),result,results);
stores.add(i,number);
result.remove(result.size() - 1);
}
}

}

}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java leetcode 算法