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);
                }
            }
        }
    }
    
    不一样的烟火
  • 相关阅读:
    canvas阴影
    Anagrams
    Compare Strings
    php rtrim的一个坑,很“二”的问题
    LRU算法
    linux下重启php服务
    nginx -s reload "/alidata/server/nginx/logs/nginx.pid" failed
    【ACM】阶乘因式分解(二)
    Two Strings Are Anagrams
    找子串
  • 原文地址:https://www.cnblogs.com/cstdio1/p/13362373.html
Copyright © 2011-2022 走看看