当前位置: 首页 > 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(有坑)
  • 财政部部长:中方主张通过平等对话协商解决贸易和关税争议
  • 小马智行彭军:今年是Robotaxi量产元年,有望3年后盈亏平衡
  • 鸿蒙智行八大车型亮相上海车展,余承东拉上三家车企老总“直播推销”
  • “两高”发布侵犯知产犯罪司法解释:降低部分犯罪入罪门槛
  • 美联储褐皮书:关税政策背景下,美国部分地区物价上涨、经济前景恶化
  • 主刀完成3万余例手术,81岁神经外科学专家徐启武逝世