Leetcode:组合
回溯法代码框架
vector<int> temp;
void dfs(int cur, int n) {
if (cur == n + 1) {
// 记录答案
// ...
return;
}
// 考虑选择当前位置
temp.push_back(cur);
dfs(cur + 1, n, k);
temp.pop_back();
// 考虑不选择当前位置
dfs(cur + 1, n, k);
}
回溯法与二叉树的深度优先遍历异曲同工
class Solution {
public:
void backtrack(vector<vector<int>> &result,vector<int> &ans,int num,int n,int k){
if(ans.size()+(n-num+1)<k){
return;
}
if(ans.size()==k){
result.push_back(ans);
return;
}
ans.push_back(num);
//子结果的控制因素,如确定vector的起始元素是1、2,在后面变化元素防止重复
backtrack(result,ans,num+1,n,k);
ans.pop_back();
//在把末尾的元素弹出后,需要继续加入新元素,所以这里要加一个回溯
backtrack(result,ans,num+1,n,k);
}
vector<vector<int>> combine(int n, int k) {
vector<vector<int>> result;
vector<int> ans;
backtrack(result,ans,1,n,k);
return result;
}
};
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律