穷举 VS 暴搜 VS 深搜 VS 回溯 VS 剪枝

一:全排列

1.1题目

题目链接:https://leetcode.cn/problems/permutations/description/


1.2算法原理


1.3代码

cpp 复制代码
class Solution {
public:
    vector<vector<int>> ret;
    vector<int> path;
    bool check[7] = {false};//用来判断这个下标所对应的数字是否已经使用了
    vector<vector<int>> permute(vector<int>& nums) 
    {
        dfs(nums);
        return ret;
    }

    void dfs(vector<int>& nums)
    {
        if(path.size() == nums.size())
        {
            ret.push_back(path);
            return;
        }

        for(int i = 0; i < nums.size();i++)
        {
            if(!check[i])
            {
                path.push_back(nums[i]);
                check[i] = true;
                dfs(nums);
                //回溯:恢复现场
                path.pop_back();
                check[i] = false;
            }
        }
    }
};

二:子集

2.1题目

题目链接:https://leetcode.cn/problems/subsets/description/


2.2算法原理


2.3代码

解法一:pos位置的数字是选还是不选

cpp 复制代码
class Solution {
public:
    vector<vector<int>> ret = {};
    vector<int> path;
    vector<vector<int>> subsets(vector<int>& nums) 
    {
        dfs(nums,0);
        return ret;
    }

    void dfs(vector<int>& nums,int pos)
    {
        if(pos == nums.size())
        {
            ret.push_back(path);
            return;
        }

        //选pos位置的数字
        path.push_back(nums[pos]);
        dfs(nums,pos+1);
        path.pop_back();

        //不选pos位置的数字
        dfs(nums,pos+1);
    }
};

解法二:只选择pos及之后的数字

cpp 复制代码
class Solution {
public:
    vector<vector<int>> ret;
    vector<int> path;
    vector<vector<int>> subsets(vector<int>& nums) 
    {
        dfs(nums,0);
        return ret;
    }

    void dfs(vector<int>& nums,int pos)
    {
        ret.push_back(path);

        for(int i = pos;i < nums.size();i++)
        {
            path.push_back(nums[i]);
            dfs(nums,i+1);
            path.pop_back();
        }
    }
};
相关推荐
小小龙学IT7 小时前
DuckDB 深度实战:用 C++ 在进程内跑一个「分析型数据库」
数据库·c++
SuperByteMaster8 小时前
timer.c 介绍
c语言
知无不研8 小时前
lambda表达式的使用(3)
开发语言·c++·lambda
2501_906565128 小时前
数学之美探究
算法
oier_Asad.Chen8 小时前
【洛谷题解/AcWing题解/OI学习笔记】洛谷P2868【USACO07DEC】Sightseeing Cows G(01分数规划求最大比率)
算法·图论·spfa·二分·负环
C++ 老炮儿的技术栈10 小时前
基于Qt实现轻量化本地音乐播放器
开发语言·c++·qt·c·播放器·音乐
qq_4480111610 小时前
C语言中的柔性数组
c语言·开发语言·柔性数组
leisoo809710 小时前
财报数据怎么排雷本地化Python构建财务异常预警系统
人工智能·python·算法
qz_Serene12 小时前
C++:类和对象(上)
开发语言·c++
luj_176812 小时前
塔防牌:策略与卡牌的智慧碰撞
服务器·c语言·开发语言·经验分享·算法