活跃农民
- 积分
- 851
- 大米
- 颗
- 鳄梨
- 个
- 水井
- 尺
- 蓝莓
- 颗
- 萝卜
- 根
- 小米
- 粒
- 学分
- 个
- 注册时间
- 2012-11-25
- 最后登录
- 1970-1-1
|
Never mind.. 我刚又看了下之前写的,考虑疏忽了,因为没有排序,代码如下,另外我run了下我说的那种iterative的方法,两种方法都可以最快到320ms左右,如你所说 backtracking效率并不低- public class Solution {
- List<List<Integer>> result=new ArrayList<>();
- public List<List<Integer>> permuteUnique(int[] nums) {
- if(nums.length==0)
- return result;
- Arrays.sort(nums);//Forget to sort here,which leads to TLE
- List<Integer> left=new LinkedList<Integer>();
- for(int num:nums)
- left.add(num);
- permuteSolver(new ArrayList<Integer>(),left);
- return result;
- }
- private void permuteSolver(List<Integer> per,List<Integer> left){
- if(left.size()==0){
- result.add(new ArrayList<Integer>(per));
- return;
- }
- for(int i=0;i<left.size();i++){
- if(i>0&&left.get(i)==left.get(i-1))
- continue;
- per.add(left.get(i));
- left.remove(i);
- permuteSolver(per,left);
- left.add(i,per.get(per.size()-1));
- per.remove(per.size()-1);
- }
- }
- }
复制代码 |
|