zoukankan      html  css  js  c++  java
  • leetcode 46. 全排列

    很经典很经典,虽然AC高但难度不小

    /**
    当前的排列结果level,总结果res,访问标志visit,
    边界,level达到n个数
    **/
    
    class Solution {
    public:
        vector<vector<int>> permute(vector<int>& nums) {
            if(nums.size()==0) return {};
            int len=nums.size();
            vector<vector<int>> res;
            vector<int> level;
            vector<int> visit(len,0);
            dfs(nums,res,level,visit);
            return res;
        }
        void dfs(vector<int>&nums,vector<vector<int>>&res,vector<int>&level,vector<int>&visit){
            if(level.size()==nums.size()){
                res.push_back(level);return;
            }
            for(int i=0;i<nums.size();i++){
                if(!visit[i]){
                    visit[i]=1;
                    level.push_back(nums[i]);
                    dfs(nums,res,level,visit);
                    visit[i]=0;
                    level.pop_back();
                }
            }
        }
    };

    采用深度优先搜索的代码(带注释)

    class Solution {
    public:
        vector<vector<int>> permute(vector<int>& nums) {
            vector<vector<int>> res;
            vector<int> temp,visited(nums.size(),0);
            sort(nums.begin(),nums.end());
            DFS(nums,0,visited,temp,res);
            return res;
        }
        void DFS(vector<int>& nums,int index,vector<int>& visited,vector<int>& temp,vector<vector<int>>& res){
            //递归边界,当一个排列的数达到n个后,即形成了一个排列
            if(index==nums.size()){res.push_back(temp);return;}
            //递归形式:输出以nums[i]为第一个数的所有排列,
            for(int i=0;i<nums.size();i++){
                if(visited[i]==0){
                    temp.push_back(nums[i]);
                    visited[i]=1;
                    //递归调用时,输出前(index+1)个数确定的所有排列
                    DFS(nums,index+1,visited,temp,res);
                    //递归调用时,前(index+1)个数确定的所有排列输出完成,将后面所用到的元素visited设为0,并将temp中第(index+1)个数删除,然后按顺序继续加入下一个没有被添加到temp中的数
                    temp.pop_back();
                    visited[i]=0;
                }
            }
        }
    };
  • 相关阅读:
    TCP通信
    TCP/IP与套接字
    SPA页面性能优化
    webpack打包css样式出错
    《转》理解Object.defineProperty的作用
    vue2.0 自定义时间过滤器
    axios post提交数据格式不对的问题
    vue-cli开发时,ajax跨域详细解决办法
    关于Vue实例的生命周期created和mounted的区别
    npm install 报错(npm ERR! errno -4048,Error: EPERM: operation not permitted,)解决方法
  • 原文地址:https://www.cnblogs.com/joelwang/p/10699007.html
Copyright © 2011-2022 走看看