当前位置: 首页 > article >正文

代码随想录算法训练营第二十四天|leetcode78、90、93题

一、leetcode第93题

class Solution {
public:
    vector<string> restoreIpAddresses(string s) {
        int n = s.size();
        vector<string> res;

        function<void(string, int, int)> dfs = [&](string ss, int idx, int t) -> void {
            // 终止条件,枚举完,使用了4次`.`,需要删掉一个`.`
            if (idx == n || t == 4) {
                if (idx == n && t == 4) {
                    ss.pop_back();
                    res.push_back(ss);
                }
                return;
            }
            // 枚举位数,从idx下标开始i个位数
            for (int i = 1; i <= 3; ++ i) {
                if (i + idx > n) return;
                if (i != 1 && s[idx] == '0') return;
                if (i == 3 && stoi(s.substr(idx, 3)) > 255) return;
                dfs(ss + s.substr(idx, i) + ".", idx + i, t + 1);
            }
        };
        dfs("", 0, 0);
        return res;
    }
};

二、leetcode第78题

class Solution {
private:
    vector<vector<int>> result;
    vector<int> path;
    void backtracking(vector<int>& nums, int startIndex) {
        result.push_back(path); // 收集子集,要放在终止添加的上面,否则会漏掉自己
        if (startIndex >= nums.size()) { // 终止条件可以不加
            return;
        }
        for (int i = startIndex; i < nums.size(); i++) {
            path.push_back(nums[i]);
            backtracking(nums, i + 1);
            path.pop_back();
        }
    }
public:
    vector<vector<int>> subsets(vector<int>& nums) {
        result.clear();
        path.clear();
        backtracking(nums, 0);
        return result;
    }
};

三、leetcode第90题

class Solution {
    vector<vector<int>> res;
    vector<int> path;
    //组合问题设置stratindex:为了防止重复
    //排列问题从0开始
    void dfs(vector<int>&nums,int startindex,vector<bool>&st)
    {
        res.push_back(path);//先加入答案
        if(startindex>=nums.size())
        {
            return;
        }
        for(int i=startindex;i<nums.size();i++)
        {
            //树层去重
            if(i>0&&nums[i-1]==nums[i]&&st[i-1]==false) continue;
            st[i]=true;
            path.push_back(nums[i]);
            dfs(nums,i+1,st);
            st[i]=false;
            path.pop_back();
        }
    }
public:
    vector<vector<int>> subsetsWithDup(vector<int>& nums) {
        vector<bool> st(nums.size(),false);
        sort(nums.begin(),nums.end());
        dfs(nums,0,st);
        return res;
    }
};


http://www.kler.cn/a/274304.html

相关文章:

  • Ubuntu vi(vim)编辑器配置一键补全main函数
  • 【数据安全】如何保证其安全
  • 【win10+RAGFlow+Ollama】搭建本地大模型助手(教程+源码)
  • RabbitMQ消息可靠性保证机制7--可靠性分析-rabbitmq_tracing插件
  • 日本充电桩标准--CHAdeMO介绍
  • APM32F411使用IIS外设驱动es8388实现自录自播
  • 软件测试:C++ Google Test单元测试框架GTest
  • 虚拟机VMware上 centos7 的网络配置
  • 单调栈,LeetCode 1793. 好子数组的最大分数
  • 2、鸿蒙学习-申请调试证书和调试Profile文件
  • 0基础学习VR全景平台篇第145篇:图层控件功能
  • 综合练习(python)
  • GAMES101 学习3
  • 【计算机考研】408全年复习保姆级规划+资料
  • .Net Core 中间件验签
  • 华为组网:核心交换机旁挂防火墙,基于ACL重定向配置实验
  • Maven项目如何导入依赖包
  • Nginx安装教程
  • Springboot+Redis:实现缓存 减少对数据库的压力
  • fastjson反序列化攻略
  • 解决重装系统之后,开始菜单找不到Anaconda3相关图标
  • 快速从0-1完成聊天室开发——环信ChatroomUIKit功能详解
  • Java-SpringAop 编程式事物实现
  • 如何在三个简单步骤中为对象检测标注图像
  • C语言---指针的两个运算符:点和箭头
  • Java 多线程(抢CPU)