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;
    }
};
相关推荐
果霸大叔26 分钟前
AI网关第8篇:AI 代理与负载均衡--多模型实例如何调度?
人工智能·算法·自然语言处理·负载均衡·ai-native
用户849137175471629 分钟前
Redis 跳表用了"随机"的魔法,实现了比平衡树更快的查找!
数据结构·redis
不会就选b31 分钟前
算法日常・每日刷题--<动态规划>29
数据结构·算法·leetcode
垆边人似月.39 分钟前
最少的元素个数使和为 target
数据结构·c++·算法
炽橙超真云40 分钟前
2D 工程图纸如何自动转成可编辑 3D 模型?拆解读图与建体两条技术路径(DXF/DWG/PDF 到 STEP)
算法·3d·工业智能·工业ai
夕除1 小时前
redis--dict rehash
算法·哈希算法
云上先途11 小时前
Agent 轨迹数据一般包含哪些内容,加工的核心目标是什么?
人工智能·算法·机器学习
佳木逢钺2 小时前
从火灾模拟到系统热寂:一个双非运维如何用零 GPU 推导出多智能体系统的终极死锁
人工智能·python·算法·多智能体
垆边人似月.2 小时前
网格最小代价路径,总代价不超过 budget
算法
虚无的纽扣2 小时前
【力扣刷题】第五天:将 x 减到 0 的最小操作数、最大连续1的个数 III
算法·leetcode·职场和发展