| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 数据结构与算法 -> 【Leetcode HOT100】组合总和 c++ -> 正文阅读 |
|
[数据结构与算法]【Leetcode HOT100】组合总和 c++ |
题目描述: 给你一个 无重复元素 的整数数组 candidates 和一个目标整数 target ,找出 candidates 中可以使数字和为目标数 target 的 所有 不同组合 ,并以列表形式返回。你可以按 任意顺序 返回这些组合。 candidates 中的 同一个 数字可以 无限制重复被选取 。如果至少一个数字的被选数量不同,则两种组合是不同的。 对于给定的输入,保证和为 target 的不同组合数少于 150 个。 示例1:
示例2:
示例3:
提示:
方法1 回溯 c++代码:
因为只是回溯,没有剪枝所,相当于暴力搜索,所以速度很慢。 方法2 回溯+剪枝 c++代码:
对回溯进行剪枝: 在对数组中的数字进行判断是否可以作为解的其中一个加数时,若对数组提前从小到大排序,那么当target-candidates[i] < 0时:就可以判定这之后所有的数字都将大于要凑的target,即不可能有解,可以不再回溯直接退出搜索。这一节省不必要的回溯的操作叫“剪枝”。 总结: 回溯法: 使用场景:当问题的组合数较大,需要找到一个最优解或找到多个解时,使用回溯法。 实现方法:使用深度优先搜索DFS,具体的可以使用递归,也可以使用for循环迭代实现。 提高速度:剪枝,以避免无效搜索。具体使用两种函数——限界函数(得不到最优解),**约束函数(剪去不符合要求的子树)**进行剪枝。 注意: !此题限定每个数字都可以被重复使用,所以若选择当前数字candidats[temp],下一次dfs的参数仍为temp而不是temp+1 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/25 23:45:20- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |