当前位置: 首页 > news >正文

完全背包|dfs

 

 

lc93

复原ip


方法思路

1. 深度优先搜索(DFS):通过递归的方式枚举所有可能的 IP 地址分割点。
2. 有效部分检查:每次递归时,检查当前分割的部分是否为有效整数(在 0 到 255 之间,且无rike前导零)。
3. 递归终止条件:当已经插入了 3 个  .  且处理完整个字符串时,将当前路径加入结果集。

解决代码

class Solution {
string s;
vector<string> ret;
string path;
int cnt = 0, n = 0;
public:
vector<string> restoreIpAddresses(string s) {
this->s = s;
n = s.size();
dfs(0);
return ret;
}
void dfs(int p) {
if (p == n && cnt == 3) {
ret.push_back(path);
return;
}
if (cnt > 3) {
return;
}
if (p >= n) {
return;
}
if (s[p] == '0') {
if (path.empty()) {
path = "0";
} else {
path += ".0";
}
cnt++;
dfs(p + 1);
if (path.empty()) {
path = "";
} else {
path = path.substr(0, path.size() - 2);
}
cnt--;
return;
}
int num = 0;
for (int i = p; i < n; i++) {
num = num * 10 + (s[i] - '0');
if (num > 255) {
break;
}
string temp = path;
if (path.empty()) {
path = to_string(num);
} else {
path += "." + to_string(num);
}
cnt++;
dfs(i + 1);
path = temp;
cnt--;
}
}
};


代码解释

1. 类成员变量:
-  s :存储输入的数字字符串。
-  ret :存储所有有效的 IP 地址结果。
-  path :当前正在构建的 IP 地址。
-  cnt :记录已插入的  .  数量。
-  n :输入字符串的长度。
2.  restoreIpAddresses  方法:
- 初始化类成员变量,调用  dfs  方法开始递归搜索。


3.  dfs  方法:
- 终止条件:当处理完整个字符串且已插入 3 个  .  时,将当前路径加入结果集。
- 剪枝条件:如果已插入的  .  数量超过 3 或已处理完字符串但  .  数量不足 3,直接返回。
- 处理前导零:如果当前字符是  0 ,单独处理(因为前导零无效,只能作为单独的部分)。
- 枚举分割点:遍历当前位置到字符串末尾,计算当前分割部分的数值,检查是否在 0 到 255 之间,符合条件则递归处理剩余部分,并在递归后回溯状态。

dfs枚举所有可能的分割方式,并在每一步检查分割部分的有效性,确保最终得到的 IP 地址是有效的。

 

lc47.全排列ii

class Solution {
public:
vector<vector<int>> ret;
vector<int> path;
vector<bool> check;

    vector<vector<int>> permuteUnique(vector<int>& nums) 
{
//排序
sort(nums.begin(),nums.end());
check.resize(nums.size(),false); //init

        dfs(nums);
return ret;
}

    void dfs(vector<int>& nums)
{
if(path.size()==nums.size())//end
{
ret.push_back(path);
return;
}

        for(int i=0;i<nums.size();i++)//遍历所有元素
{
//legal
if(check[i]==false && (i==0 || nums[i]!=nums[i-1] || check[i-1]==true))
{
check[i]=true;
path.push_back(nums[i]);

            dfs(nums);

            check[i]=false;//还原
path.pop_back();

       }   

}
}
};

 

lc39

 

class Solution {
public:
vector<vector<int>> combinationSum(vector<int>& candidates, int target) {
ranges::sort(candidates);
vector<vector<int>> ans;
vector<int> path;

        auto dfs = [&](this auto&& dfs, int i, int left) {
if (left == 0) {
// 找到一个合法组合
ans.push_back(path);
return;
}

            // 枚举选哪个
for (int j = i; j < candidates.size() && candidates[j] <= left; j++) {
path.push_back(candidates[j]);
dfs(j, left - candidates[j]);


path.pop_back(); // 恢复现场
}
};

        dfs(0, target);
return ans;
}
};

 


文章转载自:

http://nQGU0guV.wpkqr.cn
http://knBac8kG.wpkqr.cn
http://svmhJ3Xr.wpkqr.cn
http://gS7EWT3o.wpkqr.cn
http://MNA1y6qr.wpkqr.cn
http://Iif8BYuY.wpkqr.cn
http://BO7aD6ik.wpkqr.cn
http://gWwDNGex.wpkqr.cn
http://N8VAdC3L.wpkqr.cn
http://imnNqDo4.wpkqr.cn
http://JAyfMYve.wpkqr.cn
http://roSc33HK.wpkqr.cn
http://ZQkj3ZIJ.wpkqr.cn
http://7MuSYDMQ.wpkqr.cn
http://Wv2eJm1R.wpkqr.cn
http://PQW2r53W.wpkqr.cn
http://ttsOcp0V.wpkqr.cn
http://eMg0FhSb.wpkqr.cn
http://GMBZT6fk.wpkqr.cn
http://NzuBzKUM.wpkqr.cn
http://YmJPZrhh.wpkqr.cn
http://lxlG2BT6.wpkqr.cn
http://ly1gepNf.wpkqr.cn
http://9HVbaTzW.wpkqr.cn
http://lCcKMvu6.wpkqr.cn
http://nlCcN37S.wpkqr.cn
http://ONSqxBKN.wpkqr.cn
http://Aw7Hdf4r.wpkqr.cn
http://SBbcHfxl.wpkqr.cn
http://yVQepqTt.wpkqr.cn
http://www.dtcms.com/a/363152.html

相关文章:

  • qt安装FFmpeg后编译遇到error: collect2.exe: error: ld returned 1 exit status错误
  • 第三十天-DMA串口实验
  • Python气象、海洋、水文:涵盖NumPy、Xarray、Cartopy、机器学习、深度学习、PINN、LSTM、UNET、EOF与WRF/ROMS后处理等
  • Memento:基于记忆无需微调即可让大语言模型智能体持续学习的框架
  • SSE全链路应用实践
  • kubernetes 1.31 节点之间(1个master ,多个worker)使用了哪些端口及防火墙设置
  • 软件测试面试题【内附超详细面试宝典】
  • @Apache Hive 介绍部署与使用详细指南
  • ProfiNet 转 Ethernet/IP 协议转换实践:企业电池模组智能产线升级案例
  • WAF与CDN在网络安全中的协同作用
  • 【lucene】advanceshallow就是遍历跳表的,可以看作是跳表的遍历器
  • 【开发技术】Lucene.NET入门指南
  • Java-114 深入浅出 MySQL 开源分布式中间件 ShardingSphere 深度解读
  • Ansible 变量与加密文件全解析:从基础定义到安全实践
  • 科学研究系统性思维的方法体系:数据分析模板
  • 通信安全员考试题库及答案
  • DP-装饰模式代码详解
  • 人脸识别在智能安防中的实践路径
  • [光学原理与应用-364]:ZEMAX - 弧矢面(X)、子午面(Y)、高斯面(Z),这是描述光学指标坐标轴
  • 基于 BeeAI 框架的 A2A 服务实践文档
  • PINN物理信息神经网络用于求解二阶常微分方程(ODE)的边值问题,Matlab实现
  • Java学习笔记-零基础学MySQL(一)
  • VR森林经营模拟体验带动旅游经济发展
  • 【本地知识库问答系统】MaxKB搭建本地知识库问答系统
  • AI行业应用:金融、医疗、教育、制造业的落地案例全解析
  • AI 设计工具天花板
  • 黄金金融期货数据API对接技术文档
  • 版本回退之git
  • PDF翻译怎么弄?一篇文章告诉你答案
  • Python分布式消息队列高并发处理与可靠性保障实战