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;
    }
};
相关推荐
放羊郎2 小时前
基于ORB-SLAM2算法的优化工作
人工智能·算法·计算机视觉
mask哥2 小时前
力扣算法java实现汇总整理(上)
java·算法·leetcode
如果'\'真能转义说3 小时前
OOXML 文档格式剖析:哈希、ZIP结构与识别
xml·算法·c#·哈希算法
夏日听雨眠3 小时前
数据结构(栈和队列)
数据结构
梦梦代码精4 小时前
BuildingAI 上部署自定义工作流智能体:5 个实用技巧
大数据·人工智能·算法·开源软件
Zephyr_05 小时前
Leedcode算法题
java·算法
流年如夢5 小时前
栈和列队(LeetCode)
数据结构·算法·leetcode·链表·职场和发展
Hello.Reader7 小时前
算法基础(十)——分治思想把大问题拆成小问题
java·开发语言·算法
绛橘色的日落(。・∀・)ノ7 小时前
机器学习之评估与偏差方差分析
算法