zoukankan      html  css  js  c++  java
  • 46. Permutations

        /*
         * 46. Permutations 
         * 2016.5.5 by Mingyang 方法还是原来那个套路,还是用一个循环递归处理子问题。
         * 区别是这里并不是一直往后推进的,前面的数有可能放到后面,所以我们需要维护一个visited数组来表示该元素是否已经在当前结果中,
         * 因为每次我们取一个元素放入结果,然后递归剩下的元素,所以不会出现重复
         * 这道题还有一个扩展就是如果元素集合中会出现重复,那么意味着我们需要跳过一些重复元素
         * 1.长度标准:无
         * 2.可选的范围:任何一个都可以选!没有顺序
         * 3.往前走一步:在未访问某一个的前提下,直接带入
         * 4.后退一步:remove
         * 5.特别的case:size到了
         * 6.关于重复:无
         */
        public List<List<Integer>> permute(int[] nums) {
            List<List<Integer>> res = new ArrayList<List<Integer>>();
            boolean[] visited = new boolean[nums.length];
            List<Integer> temp = new ArrayList<Integer>();
            dfs3(nums, visited, temp, res);
            return res;
        }
        private void dfs3(int[] nums, boolean[] visited, List<Integer> temp,List<List<Integer>> res) {
            if (temp.size() == nums.length) {
                res.add(new ArrayList<Integer>(temp));
                return;
            }
            for (int i = 0; i < nums.length; i++) {
                if (!visited[i]) {
                    visited[i] = true;
                    temp.add(nums[i]);
                    dfs3(nums, visited, temp, res);
                    temp.remove(temp.size() - 1);
                    visited[i] = false;
                }
            }
        }
  • 相关阅读:
    ArrayList与LinkedList区别
    ArrayList底层原理
    nginx启用https访问
    云服务器搭建 Nginx 静态网站
    在云服务器上(CentOS)上安装Node
    文本超出显示省略号CSS
    vue使用改变element-ui主题色
    vue中的select框的值动态绑定
    vue项目对axios的全局配置
    使用crypto-js对数据进行AES加密、解密
  • 原文地址:https://www.cnblogs.com/zmyvszk/p/5465019.html
Copyright © 2011-2022 走看看