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;
                }
            }
        }
  • 相关阅读:
    web中的安全编码
    网站安全(学习)
    head 命令(转)
    less 命令(转)
    简单网站优化
    Yahoo团队总结的关于网站性能优化的经验(转)
    more命令(转)
    linux安装oracle
    Ubuntu系统环境变量配置文件(转)
    nl命令(转)
  • 原文地址:https://www.cnblogs.com/zmyvszk/p/5465019.html
Copyright © 2011-2022 走看看