穷举 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();
        }
    }
};
相关推荐
傻乐u兔21 分钟前
C语言进阶————指针3
c语言·开发语言
大江东去浪淘尽千古风流人物37 分钟前
【VLN】VLN(Vision-and-Language Navigation视觉语言导航)算法本质,范式难点及解决方向(1)
人工智能·python·算法
rainbow68891 小时前
Linux文件描述符与重定向原理
c++
努力学算法的蒟蒻1 小时前
day79(2.7)——leetcode面试经典150
算法·leetcode·职场和发展
2401_841495641 小时前
【LeetCode刷题】二叉树的层序遍历
数据结构·python·算法·leetcode·二叉树··队列
AC赳赳老秦1 小时前
2026国产算力新周期:DeepSeek实战适配英伟达H200,引领大模型训练效率跃升
大数据·前端·人工智能·算法·tidb·memcache·deepseek
CodeSheep程序羊2 小时前
拼多多春节加班工资曝光,没几个敢给这个数的。
java·c语言·开发语言·c++·python·程序人生·职场和发展
2401_841495642 小时前
【LeetCode刷题】二叉树的直径
数据结构·python·算法·leetcode·二叉树··递归
budingxiaomoli2 小时前
优选算法-字符串
算法
I'mChloe2 小时前
PTO-ISA 深度解析:PyPTO 范式生成的底层指令集与 NPU 算子执行的硬件映射
c语言·开发语言