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

21.回溯算法3

复原ip地址

class Solution {
public:
    string ip;
    vector<string> res;
    int level=0;
    void backtracking(string s,int start){
        if((level==4)&&(start==s.size())){
            res.push_back(ip.erase(ip.size()-1,1));
            return;
        }else if((level<4)&&(start>s.size())){
            return;
        }
        int sum=0;
        for(int i=start;i<s.size();i++){
        
            if(i==start+1&&s[start]=='0')return;;
            sum=sum*10+(s[i]-'0');
            ip+=s[i];
            if(sum>=0&&sum<=255){
                string tmp=ip;
                ip+=".";
                level++;
                backtracking(s,i+1);
                level--;
                ip=tmp;
            }else{return;}
        }
    }
    vector<string> restoreIpAddresses(string s) {
        backtracking(s,0);
        return res;
    }
};

The error you’re encountering is due to an incorrect operation in the line:

ip += s[i] + ".";

Here, s[i] is a character, and when you add it to the string ".", it doesn’t behave as expected. Instead of appending the character followed by a dot (.), the expression s[i] + "." tries to perform pointer arithmetic because s[i] is treated as an integer (its ASCII value) and "." is treated as a const char*. This leads to undefined behavior, which is causing the runtime error.

所以要分成两步写,当然正确的逻辑是不会写出这句的,因为+s[i]是在循环外面,我是写错的时候发现了这个错误,所以记录一下。

子集

class Solution {
public:
    vector<vector<int>> res;
    void recursive(vector<int>& nums,int start){
        if(start==nums.size()){
            vector<int> tmp;
            
            res.push_back(tmp);
            return;
        }
        recursive(nums,start+1);
        int n=res.size();
        for(int i=0;i<n;i++){
            vector<int> tmp;
            tmp=res[i];
            tmp.push_back(nums[start]);
            res.push_back(tmp);
        }
    }
    vector<vector<int>> subsets(vector<int>& nums) {
        recursive(nums,0);
        return res;
    }
};

子集2

class Solution {
public:
    vector<int> path;
    vector<vector<int>> res;
    void backtracking(vector<int>& nums,int start){
        for(int i=start;i<nums.size();i++){
            if(i>start&&nums[i-1]==nums[i])continue;
            path.push_back(nums[i]);
            backtracking(nums,i+1);
            path.pop_back();
        }
        res.push_back(path);
    }
    vector<vector<int>> subsetsWithDup(vector<int>& nums) {
        sort(nums.begin(),nums.end());
        backtracking(nums,0);
        return res;
    }
};

相关文章:

  • 【2025最新版】Chrome谷歌浏览器如何能恢复到之前的旧版本
  • 【信息系统项目管理师-案例真题】2013下半年案例分析答案和详解
  • 对CSS了解哪些?
  • Ubuntu 下 nginx-1.24.0 源码分析 - ngx_os_specific_init函数
  • 网站改了域名,如何查找?
  • HTTP和HTTPS详解
  • ai json处理提示词
  • AI大模型零基础学习(7):边缘智能与物联网——让AI走出云端
  • XML XML约束 二、DTD
  • 基于STM32的智能工业设备健康监测系统
  • StableDiffusion学习笔记——6、XYZ图表
  • 基于spring boot物流管理系统设计与实现(代码+数据库+LW)
  • 文心一言大模型的“三级跳”:从收费到免费再到开源,一场AI生态的重构实验
  • LLM增强强化学习:开启智能决策的新篇章
  • 【文本】词嵌入经典模型:从one-hot到BERT
  • 最优化方法-牛顿法
  • 专题--Kafka
  • ML.NET库学习012:电力计量数据异常检测项目解析
  • 函数执行中的栈和寄存器调用
  • SpringAI系列 - ToolCalling篇(二) - 如何设置应用侧工具参数ToolContext(有坑)
  • 国家矿山安全监察局发布《煤矿瓦斯防治能力评估办法》
  • 五角大楼要裁一批四星上将
  • 网友建议平顶山请刘昊然任旅游宣传大使,市委:有此设想,正申请经费
  • 中国首位、亚洲首位!赵心童夺得斯诺克世锦赛冠军
  • 人民日报今日谈:坚决克服麻痹思想,狠抓工作落实
  • 云南省政协原党组成员、秘书长车志敏接受审查调查