【Leetcode】47. Permutations II 【DFS】

来源:互联网 发布:sqlite数据库访问接口 编辑:程序博客网 时间:2024/05/20 06:25


47. Permutations II

  • Total Accepted: 81758
  • Total Submissions: 279739
  • Difficulty: 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]]

思路:

1、DFS。

2、先排序,再跳过未访问的重复元素。


注意:

1、仅对未访问过的元素进行跳过,用while。

2、每次传入的visited是当前访问过的元素,即上层节点的访问情况。


代码如下:

public class Solution {    public List<List<Integer>> permuteUnique(int[] nums) {        List<List<Integer>> ret = new ArrayList<List<Integer>>();          List<Integer> ans = new ArrayList<Integer>();          boolean visited[] = new boolean[nums.length];          Arrays.sort(nums);        if(nums.length == 0 || nums == null) return ret;                    for(int i = 0 ; i < nums.length ; i++){              visited[i] = false;          }                  DFS(ret,nums,visited,ans);          return ret;      }    private void DFS(List<List<Integer>> ret , int[] nums , boolean[] visited , List<Integer> ans){        int len = nums.length;        if( ans.size() == len ){              List<Integer> tmp = new ArrayList<Integer>(ans);              ret.add(tmp);              }                        for(int i = 0 ; i < len ; i++){              while(i > 0 && i < len && nums[i] == nums[i-1] && visited[i-1] != true) i++;                        if(i==len)                return;                        if(visited[i]) continue;                         visited[i] = true;               ans.add(nums[i]);            DFS(ret,nums,visited,ans);              visited[i] = false;              ans.remove(ans.size()-1);        }      }  }


0 0
原创粉丝点击