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;
    }
};
相关推荐
偷吃的耗子15 分钟前
【CNN算法理解】:CNN平移不变性详解:数学原理与实例
人工智能·算法·cnn
dazzle1 小时前
机器学习算法原理与实践-入门(三):使用数学方法实现KNN
人工智能·算法·机器学习
那个村的李富贵1 小时前
智能炼金术:CANN加速的新材料AI设计系统
人工智能·算法·aigc·cann
张张努力变强1 小时前
C++ STL string 类:常用接口 + auto + 范围 for全攻略,字符串操作效率拉满
开发语言·数据结构·c++·算法·stl
万岳科技系统开发1 小时前
食堂采购系统源码库存扣减算法与并发控制实现详解
java·前端·数据库·算法
wWYy.2 小时前
数组快排 链表归并
数据结构·链表
张登杰踩2 小时前
MCR ALS 多元曲线分辨算法详解
算法
YuTaoShao2 小时前
【LeetCode 每日一题】3634. 使数组平衡的最少移除数目——(解法一)排序+滑动窗口
算法·leetcode·排序算法
波波0072 小时前
每日一题:.NET 的 GC是如何分代工作的?
算法·.net·gc
风暴之零2 小时前
变点检测算法PELT
算法