zoukankan      html  css  js  c++  java
  • 全排列

    题解:用一位数代替标记数组节省空间

    class Solution {
        List<List<Integer>> res = new ArrayList<>();
        public List<List<Integer>> permute(int[] nums) {
            List<Integer> list = new ArrayList<>();
            dfs(0,0,list,nums);
            return res;
        }
        void dfs(int u,int state,List<Integer> list,int[] nums){
            if(u == nums.length) {
                res.add(new ArrayList(list));
                return ;
            }
            for(int i=0;i<nums.length;i++){
                if((state>>i&1)==0){//将state右移i位之后与1相与实际上就是看state的第i位是否为0
                    list.add(nums[i]);
                    dfs(u+1,state|(1<<i),list,nums);//将state的第i位置为1
                    list.remove(list.size()-1);
                }
            }
        }
    }
    

    Set暴力去重

    class Solution {
        Set<List<Integer>> set = new HashSet<>();
        
        public List<List<Integer>> permuteUnique(int[] nums) {
            List<Integer> list = new ArrayList<>();
            dfs(0,nums,list,0);
            return new ArrayList<>(set);
        }
        void dfs(int u,int[] nums,List<Integer> list,int state){
            if(u == nums.length){
                set.add(new ArrayList(list));
                return;
            }
            for(int i=0;i<nums.length;i++){
                if((state>>i&1)==0){
                    list.add(nums[i]);
                    dfs(u+1,nums,list,state|(1<<i));
                    list.remove(list.size()-1);
                }
            }
        }
    }
    
    不一样的烟火
  • 相关阅读:
    第二阶段Sprint冲刺会议8
    第二阶段Sprint冲刺会议7
    第二阶段Sprint冲刺会议6
    问题账户需求分析
    2016年秋季个人阅读计划
    应该怎么做需求分析--读后感
    个人总结
    人月神话第三篇阅读笔记
    第十六周学习进度
    人月神话第二篇阅读笔记
  • 原文地址:https://www.cnblogs.com/cstdio1/p/13362373.html
Copyright © 2011-2022 走看看