day24

93. 复原 IP 地址 - 力扣(LeetCode)

检查isValid时,要考虑清楚所有的情况。

cpp 复制代码
class Solution {
public:
    vector<string> result;
    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]<'0'||s[i]>'9')return false;
            num = num*10 + (s[i]-'0');
            if(num>255)return false;
        }
        return true;
    }
    void backtracking(string& s,int startIndex,int countNum)
    {
        if(countNum==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,'.');
                countNum++;
                backtracking(s,i+2,countNum);
                s.erase(s.begin()+i+1);
                countNum--;
            }
            else break;
        }
    }
    vector<string> restoreIpAddresses(string s) {   
        if(s.size()>12||s.size()<4) return result;
        backtracking(s,0,0);
        return result;
    }
};

78. 子集 - 力扣(LeetCode)

没什么好说的

cpp 复制代码
class Solution {
public:
    vector<vector<int>> result;
    vector<int> path;
    void backtracking(vector<int>& nums,int startIndex)
    {
        result.push_back(path);

        for(int i = startIndex;i<nums.size();i++)
        {
            path.push_back(nums[i]);
            backtracking(nums,i+1);
            path.pop_back();
        }
    }
    vector<vector<int>> subsets(vector<int>& nums) {
        backtracking(nums,0);
        return result;
    }
};

90. 子集 II - 力扣(LeetCode)

每次往result里push的时候,判断一下当前path是否存在于result里即可。

cpp 复制代码
class Solution {
public:
    vector<vector<int>> result;
    vector<int> path;
    void backtracking(vector<int>& nums,int startIndex)
    {
        if(find(result.begin(),result.end(),path)==result.end())
        {
            result.push_back(path);
        }

        for(int i = startIndex;i<nums.size();i++)
        {
            path.push_back(nums[i]);
            backtracking(nums,i+1);
            path.pop_back();
        }
    }
    vector<vector<int>> subsetsWithDup(vector<int>& nums) {
        sort(nums.begin(),nums.end());
        backtracking(nums,0);
        return result;
    }
};
相关推荐
fie88894 小时前
NSCT(非下采样轮廓波变换)的分解和重建程序
算法
晨晖25 小时前
单链表逆转,c语言
c语言·数据结构·算法
YoungHong19925 小时前
面试经典150题[072]:从前序与中序遍历序列构造二叉树(LeetCode 105)
leetcode·面试·职场和发展
im_AMBER6 小时前
Leetcode 78 识别数组中的最大异常值 | 镜像对之间最小绝对距离
笔记·学习·算法·leetcode
鼾声鼾语7 小时前
matlab的ros2发布的消息,局域网内其他设备收不到情况吗?但是matlab可以订阅其他局域网的ros2发布的消息(问题总结)
开发语言·人工智能·深度学习·算法·matlab·isaaclab
其美杰布-富贵-李7 小时前
HDF5文件学习笔记
数据结构·笔记·学习
LYFlied7 小时前
【每日算法】LeetCode 25. K 个一组翻转链表
算法·leetcode·链表
Swizard7 小时前
别再迷信“准确率”了!一文读懂 AI 图像分割的黄金标尺 —— Dice 系数
python·算法·训练
s09071367 小时前
紧凑型3D成像声纳实现路径
算法·3d·声呐·前视多波束
可爱的小小小狼7 小时前
算法:二叉树遍历
算法