leetcode

    xiaoxiao2021-03-25  112

    题意:

    给一个数组,返回其所有排列。(不重复)

    分析:

    说明在搜索树种,每下一层,搜素区间就减1(减掉的那个1,就是父节点本身)

    以上能得到所有排列

    但是由于数组中可能有相同的元素,所以排列可能有相同的。

    所以,可以利用排序,并只将相同元素的第一个进入搜索的方式去掉相同的。

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

    转载请注明原文地址: https://ju.6miu.com/read-15037.html

    最新回复(0)