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;
    }
};
相关推荐
无极低码13 小时前
ecGlypher新手安装分步指南(标准化流程)
人工智能·算法·自然语言处理·大模型·rag
软件算法开发13 小时前
基于海象优化算法的LSTM网络模型(WOA-LSTM)的一维时间序列预测matlab仿真
算法·matlab·lstm·一维时间序列预测·woa-lstm·海象优化
罗超驿13 小时前
独立实现双向链表_LinkedList
java·数据结构·链表·linkedlist
superior tigre14 小时前
22 括号生成
算法·深度优先
努力也学不会java15 小时前
【缓存算法】一篇文章带你彻底搞懂面试高频题LRU/LFU
java·数据结构·人工智能·算法·缓存·面试
旖-旎15 小时前
二分查找(x的平方根)(4)
c++·算法·二分查找·力扣·双指针
ECT-OS-JiuHuaShan15 小时前
朱梁万有递归元定理,重构《易经》
算法·重构
智者知已应修善业16 小时前
【51单片机独立按键控制数码管移动反向,2片74CH573/74CH273段和位,按键按下保持原状态】2023-3-25
经验分享·笔记·单片机·嵌入式硬件·算法·51单片机
khddvbe16 小时前
C++并发编程中的死锁避免
开发语言·c++·算法
C羊驼16 小时前
C语言:两天打鱼,三天晒网
c语言·经验分享·笔记·算法·青少年编程