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

代码随想录day30

93.

分割字符串的变体,在回溯的时候注意添加标点然后注意回溯起点,设计判断IP地址是否正确的方法。

/*
 * @lc app=leetcode.cn id=93 lang=cpp
 *
 * [93] 复原 IP 地址
 */

// @lc code=start
#include<iostream>
#include<vector>
using namespace std;
class Solution {
private:
    vector<string> result;
    void backtracing(string& s,int startindex,int pointnum){
        if(pointnum==3){
            if(isValid(s,startindex,s.size()-1)){
                result.push_back(s);              
            }
            return;
        }
        for(int i=startindex;i<s.size();i++){
            if(isValid(s,startindex,i)){
                s.insert(s.begin() + i + 1 , '.');  
                pointnum++;
                backtracing(s, i + 2, pointnum);   
                pointnum--;                        
                s.erase(s.begin() + i + 1);         
            }else break;
        }
    }
    bool isValid(string& s,int start,int end){
        if(start>end){
            return false;
        }
        if(s[start]=='0'&&start!=end){
            return false;
        }
        int num=0;
        for(int i=start;i<=end;i++){
            if(s[i]>'9'||s[i]<'0')
            {
                return false;
            }
            num=num*10+(s[i]-'0');
            if(num>255){
                return false;
            }
        }
        return true;
    }

public:
    vector<string> restoreIpAddresses(string s) {
        result.clear();
        if(s.size()<4||s.size()>12)
        return result;
        backtracing(s,0,0);
        return result;
    }
};
// @lc code=end

 78.

这题比较简单,套回溯模板即可。

/*
 * @lc app=leetcode.cn id=93 lang=cpp
 *
 * [93] 复原 IP 地址
 */

// @lc code=start
#include<iostream>
#include<vector>
using namespace std;
class Solution {
private:
    vector<string> result;
    void backtracing(string& s,int startindex,int pointnum){
        if(pointnum==3){
            if(isValid(s,startindex,s.size()-1)){
                result.push_back(s);              
            }
            return;
        }
        for(int i=startindex;i<s.size();i++){
            if(isValid(s,startindex,i)){
                s.insert(s.begin() + i + 1 , '.');  
                pointnum++;
                backtracing(s, i + 2, pointnum);   
                pointnum--;                        
                s.erase(s.begin() + i + 1);         
            }else break;
        }
    }
    bool isValid(string& s,int start,int end){
        if(start>end){
            return false;
        }
        if(s[start]=='0'&&start!=end){
            return false;
        }
        int num=0;
        for(int i=start;i<=end;i++){
            if(s[i]>'9'||s[i]<'0')
            {
                return false;
            }
            num=num*10+(s[i]-'0');
            if(num>255){
                return false;
            }
        }
        return true;
    }

public:
    vector<string> restoreIpAddresses(string s) {
        result.clear();
        if(s.size()<4||s.size()>12)
        return result;
        backtracing(s,0,0);
        return result;
    }
};
// @lc code=end

90.

与上一个相比增加了去重判断,学会去重判断逻辑。

/*
 * @lc app=leetcode.cn id=90 lang=cpp
 *
 * [90] 子集 II
 */

// @lc code=start
#include<iostream>
#include<vector>
using namespace std;
class Solution {
private:
    vector<vector<int>>result;
    vector<int>path;
    void backtracing(vector<int>&nums,int startindex,vector<bool>used){
        result.push_back(path);
        for(int i=startindex;i<nums.size();i++){
            if(i>0&&nums[i]==nums[i-1]&&used[i-1]==false){
                continue;
            }
            path.push_back(nums[i]);
            used[i]=true;
            backtracing(nums,i+1,used);
            path.pop_back();
            used[i]=false;
        }
    }
public:
    vector<vector<int>> subsetsWithDup(vector<int>& nums) {
        result.clear();
        path.clear();
        vector<bool>used(nums.size(),false);
        sort(nums.begin(),nums.end());
        backtracing(nums,0,used);
        return result;
    }
};
// @lc code=end


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

相关文章:

  • 路由器如何进行数据包转发?
  • Qt实现简易音乐播放器
  • SQL条件分支中的大讲究
  • Centos 8 离线升级openssh 9.9
  • C#项目引用VB.NET 类库项目,生成一个EXE,这是什么原理
  • 树莓派卷积神经网络实战车牌检测与识别
  • 行测智能组卷【61分】
  • ctf网络安全题库 ctf网络安全大赛答案
  • 基于微信小程序的医院预约挂号系统的设计与实现
  • 如何下载B站视频到本地
  • docker,k8s,docker compose三者的关系
  • Kafka 入门与实战
  • (2025,推理语言模型 / RLM,deepseek-v3,推理结构,推理策略,强化学习概念,监督学习方法,计算优化技术)
  • OBS::Display
  • GlusterFS源码讲解:如何实现最终一致性
  • 【实用技能】如何将 Web 视图添加到 Compose Multiplatform 应用程序
  • Java项目: 基于SpringBoot+mybatis+maven+mysql实现的智能学习平台管理系(含源码+数据库+毕业论文)
  • Web3 跨链技术:构建互联互通的虚拟世界
  • C++Primer 赋值运算符
  • MyBatis框架详解
  • 通过vLLM部署LLM模型到生产环境中
  • 2502全球无线产品认证新闻资讯|英利检测
  • 计算机组成原理——指令系统(五)
  • 十一、CentOS Stream 9 安装 Docker
  • 【图像处理】-不同的图像存储格式
  • 蓝桥杯生命之树(DP)