zoukankan      html  css  js  c++  java
  • LeetCode 47 全排列II

    LeetCode 47 全排列II

    问题描述:
    给定一个可包含重复数字的序列,返回所有不重复的全排列。

    DFS

    1. 使用一个等长数组标记已使用元素

    执行用时:2 ms, 在所有 Java 提交中击败了74.52%的用户
    内存消耗:39.6 MB, 在所有 Java 提交中击败了40.76%的用户

    /**
     * @author CodeSPA
     * @date 2020/5/28 - 10:52
     */
    import java.util.LinkedList;
    import java.util.Arrays;
    class Solution {
        public List<List<Integer>> result = new LinkedList<>();
        public List<List<Integer>> permuteUnique(int[] nums) {
            if(nums.length == 0){
                result.add(new ArrayList<Integer>());
                return result;
            }
            //首先给数组排序
            Arrays.sort(nums);
            findUnique(nums,new boolean[nums.length],new LinkedList<Integer>());
            return result;
        }
        public void findUnique(int[] nums, boolean[] visited,LinkedList<Integer> trace){
            //结束条件
            if(trace.size() == nums.length){
                result.add(new LinkedList(trace));
                return ;
            }
            //选择列表
            for(int i = 0; i<nums.length; i++){
                //其次,我们已经选择过的不需要再放进去了
                if(visited[i]) continue;
                //接下来,如果当前节点与他的前一个节点一样,并其他的前一个节点已经被遍历过了,那我们也就不需要了。
                if(i>0 && nums[i] == nums[i-1] && visited[i-1]) break;
                //做出选择
                trace.add(nums[i]);
                visited[i] = true;
                findUnique(nums,visited,trace);
                //撤销选择
                trace.removeLast();
                visited[i] = false;
            }
        }
    }
    
  • 相关阅读:
    Vue常用语法
    Vue--过滤器、指令、插件
    使用vue-cli创建项目
    electron Ctrl+滚轮事件 放大缩小
    axios 处理超时问题 记录
    electron 清除所有cookie记录
    electron用默认浏览器打开链接的3种实现方式
    electron 不支持Ctrl+滚动条放大缩小,自己动手做了一个react组件
    排序算法记录
    umi react 集成 spreadjs
  • 原文地址:https://www.cnblogs.com/CodeSPA/p/13689330.html
Copyright © 2011-2022 走看看