zoukankan      html  css  js  c++  java
  • leecode---46---数组,dfs---求出数组的所有组合

    创建一个boolean数组去记录数组中每个数字的使用情况。
    dfs的入参:最终结果,当前结果,原数组,数组boolean值。
    如果当前结果长度等于数组长度记录结果。
    否则遍历数组boolean值从第一个位置开始遍历,如果是false说明没有使用过,那么将这个参数存入当前数组的同时将布尔值改变成false,然后进行下一次dfs。
    最后需要弹出该位置的参数,因为这个参数可以由其他参数替代。
     
     

     
     
    题意
    [1,2,3] have the following permutations:
    [
    [1,2,3],
    [1,3,2],
    [2,1,3],
    [2,3,1],
    [3,1,2],
    [3,2,1]
    ]
     
     
    分析
    1.要判断某个数字之前是否使用过,那么就必须
     
     
    代码
    class Solution {
        public List<List<Integer>> permute(int[] nums) {
            List<List<Integer>> res = new ArrayList<List<Integer>>();
            List<Integer> item = new ArrayList<Integer>();
            
            if(nums.length==0||nums==null)
                return res;
            boolean[] visited = new boolean[nums.length];  
            
            dfs(res,item,nums,visited);
            return res;
        }
        
        public void dfs(List<List<Integer>> res,List<Integer> temp,int[] nums,boolean[] visited) {
            //dfs终止条件
            if (temp.size() == nums.length) {
                res.add(new ArrayList(temp));
            }
            //首先这种dfs的遍历不是从某个pos的位置开始遍历,而是从头开始遍历的,因为可能前面的参数没有用过
            //否则就继续下一个层,也就是添加一个数字到temp里面去
            //也是从头开始遍历哪个数字用没用过,没用过就添加进去
            for (int i=0;i<nums.length;i++){
                if(visited[i] == false){
                    temp.add(nums[i]);
                    visited[i] = true;
                    dfs(res,temp,nums,visited);
                    temp.remove(temp.size() - 1);
                    visited[i] = false;
                }
            }
        }
    }
  • 相关阅读:
    sql语句查询结果排序
    Spring MVC 注解
    Spring MVC 编程流程步骤
    菜鸟学自动化测试(一)—-selenium IDE
    list和set的区别
    Overload和Override的区别。Overloaded的方法是否可以改变返回值的类型?
    是否可以从一个static方法内部发出对非static方法的调用?
    Shiro运行原理?
    shiro有哪些组件?
    简述Shiro的核心组件?
  • 原文地址:https://www.cnblogs.com/buptyuhanwen/p/8985899.html
Copyright © 2011-2022 走看看