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;
                }
            }
        }
    };
  • 相关阅读:
    先装Net Framework 后 装 IIS的处理办法
    post请求和get请求的区别
    再说重写IHttpHandler,实现前后端分离
    自定义VS的ItemTemplates 实现任意文件结构
    自动生成 Lambda查询和排序,从些查询列表so easy
    sql表分区
    关于Window Server2008 服务器上无法播放音频文件的解决方案
    Visifire Chart相关属性详解
    SQL Server数据库定时自动备份
    在SQL中 给字符串补0方法
  • 原文地址:https://www.cnblogs.com/joelwang/p/10699007.html
Copyright © 2011-2022 走看看