【代码随想录】刷题笔记Day33

前言

  • Day33虽说是一个月,但是从第一篇开始实际上已经过了8个月了,得抓紧啊

46. 全排列 - 力扣(LeetCode)

  • 前面组合就强调过差别了,这道题是排序,因此每次要从头到尾扫,结合used数组
cpp 复制代码
class Solution {
private:
    vector<vector<int>> res;
    vector<int> path;
    // vector<int> used(10);  // 私有中vector不支持初始化
    int used[7] = {};         // 私有中静态数组支持初始化
    void backtracking(vector<int>& nums){
        if(path.size() == nums.size()){
            res.push_back(path);
            return;
        }
        for(int i = 0; i < nums.size(); i++){  // 从头开始遍历
            if(used[i] == 1) continue;  // 数枝上跳过取过的元素 
            used[i] = 1;
            path.push_back(nums[i]);
            backtracking(nums);
            used[i] = 0;
            path.pop_back();
        }
    }
public:
    vector<vector<int>> permute(vector<int>& nums) {
        backtracking(nums);
        return res;
    }
};

47. 全排列 II - 力扣(LeetCode)

  • 有重复元素,比前一题多两个步骤:排序 + 去重
cpp 复制代码
class Solution {
private:
    vector<vector<int>> res;
    vector<int> path;
    int used[9] = {};         // 私有中静态数组支持初始化
    void backtracking(vector<int>& nums){
        if(path.size() == nums.size()){
            res.push_back(path);
            return;
        }
        for(int i = 0; i < nums.size(); i++){  // 从头开始遍历
            if(used[i] == 1 || i > 0 && used[i - 1] == 0 && nums[i] == nums[i - 1]) continue;  
            // 去重,used[i - 1] == 0/1都可以通过,0更好(树层上去重)
            used[i] = 1;
            path.push_back(nums[i]);
            backtracking(nums);
            used[i] = 0;
            path.pop_back();
        }
    }
public:
    vector<vector<int>> permuteUnique(vector<int>& nums) {
        sort(nums.begin(), nums.end());  // 先排序
        backtracking(nums);
        return res;
    }
};

后言

  • 搞定咯,前面有组合的铺垫之后这两道都好做很多hhh,明天结束回溯(假装是Life is strange里的MAX伸出双手回溯时间)!
相关推荐
json{shen:"jing"}6 分钟前
分割回文串-暴力法
java·算法
niuniudengdeng14 分钟前
基于调度驱动与内存主动数据供给的非冯·诺依曼智能架构
算法
追随者永远是胜利者17 分钟前
(LeetCode-Hot100)4. 寻找两个正序数组的中位数
java·算法·leetcode·职场和发展·go
BryanGG18 分钟前
【英语】自然拼读学习笔记
笔记·学习
追随者永远是胜利者19 分钟前
(LeetCode-Hot100)2. 两数相加
java·算法·leetcode·go
初夏睡觉26 分钟前
每日一题( P1518 [USACO2.4] 两只塔姆沃斯牛 The Tamworth Two)(第二天)
算法
L_Aria34 分钟前
3824. 【NOIP2014模拟9.9】渴
c++·算法·图论
gorgeous(๑>؂<๑)35 分钟前
【ICLR26-Oral Paper】透过对比的视角:视觉语言模型中的自改进视觉推理
人工智能·算法·语言模型·自然语言处理
前路不黑暗@39 分钟前
Java项目:Java脚手架项目通用基类和常量类的封装(九)
java·spring boot·笔记·学习·spring cloud·maven·intellij-idea
AC赳赳老秦39 分钟前
软件组件自动化的革命:DeepSeek 引领高效开发新时代
运维·人工智能·算法·云原生·maven·devops·deepseek