代码随想录算法训练营DAY24第七章 回溯算法part03

目录

[93. 复原 IP 地址](#93. 复原 IP 地址)

[78. 子集](#78. 子集)

[90. 子集 II](#90. 子集 II)


93. 复原 IP 地址

cpp 复制代码
class Solution {
    vector<string>ans;
    string path;
    void dfs(string s,int start,int seg){
        if(seg==4){
            if(start==s.size()){
                ans.push_back(path.substr(0,path.size()-1));
            }
            return ;
        }
        int need=4-seg;
        int last=s.size()-start;
        if(last<need||need*3<last)return ;
        int val=0;
        for(int len=1;len<=3;len++){
            if(start+len>s.size())break;
            if(len>1&&s[start]=='0')break;
            if(len==1)val+=s[start]-'0';
            else val=val*10+(s[start+len-1]-'0');
            if(val>255)break;
            int old=path.size();
            path+=s.substr(start,len);
            path+='.';
            dfs(s,start+len,seg+1);
            path.resize(old);
        }
    }
public:
    vector<string> restoreIpAddresses(string s) {
        dfs(s,0,0);
        return ans;
    }
};

78. 子集

法一:

cpp 复制代码
class Solution {
    vector<vector<int>> ans;
    vector<int> path;
    void dfs(vector<int>& nums, int start) {
        ans.push_back(path);
        for (int i = start; i < nums.size(); i++) {
            path.push_back(nums[i]);
            dfs(nums, i + 1);
            path.pop_back();
        }
    }
public:
    vector<vector<int>> subsets(vector<int>& nums) {
        dfs(nums, 0);
        return ans;
    }
};

法二:

cpp 复制代码
class Solution {
    void dfs(int x, vector<vector<int>>& ans, vector<int>& path,
             vector<int>& nums) {
        if (x == nums.size()) {
            ans.push_back(path);
            return;
        }
        //选
        path.push_back(nums[x]);
        dfs(x + 1, ans, path, nums);
        //不选
        path.pop_back();
        dfs(x + 1, ans, path, nums);
    }

public:
    vector<vector<int>> subsets(vector<int>& nums) {
        vector<vector<int>> ans;
        vector<int> path;
        dfs(0, ans, path, nums);
        return ans;
    }
};

90. 子集 II

cpp 复制代码
class Solution {
    vector<vector<int>>ans;
    vector<int>path;
    void dfs(vector<int>& nums,int start){
        ans.push_back(path);
        for(int i=start;i<nums.size();i++){
            if(i>start&&nums[i]==nums[i-1])continue;
            path.push_back(nums[i]);
            dfs(nums,i+1);
            path.pop_back();
        }
    }
public:
    vector<vector<int>> subsetsWithDup(vector<int>& nums) {
        sort(nums.begin(),nums.end());
        dfs(nums,0);
        return ans;
    }
};
相关推荐
无尽的罚坐人生2 小时前
hot 100 560.和为 K 的子数组
数据结构·算法·leetcode
Ll13045252982 小时前
leetcode代码随想录数组篇
数据结构·算法·leetcode
MicroTech20252 小时前
微算法科技(NASDAQ :MLGO)量子生成对抗网络(QGAN)技术,为网络安全防御提供了全新的技术路径
科技·算法·生成对抗网络
YuTaoShao2 小时前
【LeetCode 每日一题】3507. 移除最小数对使数组有序 I
算法·leetcode·职场和发展
LYS_06182 小时前
RM赛事C型板九轴IMU解算(3)(姿态融合算法)
c语言·算法·imu·姿态解算·四元数到欧拉角
LDG_AGI2 小时前
【机器学习】深度学习推荐系统(三十一):X For You Feed 全新推荐系统技术架构深度解析
人工智能·深度学习·算法·机器学习·架构·推荐算法
tobias.b2 小时前
408真题解析-2010-5-数据结构-树的结点数量计算
数据结构·算法·408真题解析
chilavert3183 小时前
技术演进中的开发沉思-329 JVM:垃圾回收(中)
java·jvm·算法
啊阿狸不会拉杆3 小时前
《机器学习》 第 9 章 - 深度强化学习
人工智能·算法·机器学习·计算机视觉·ai·ml