Combinations -- 回溯法--力扣101算法题解笔记

6.3Combinations -- 回溯法

题目描述

给定一个整数n和另一个整数k,在1到n中选取k个数组的所有组合方法

输入输出样例

Input : n = 4 , k = 2

Output:[ [1 , 2], [1 , 3], [1 , 4], [2 , 3], [2 , 4], [3 , 4] ]

输出的二维数组可以以任意顺序输出

题解

发现了不,基本上所有找组合、排列问题,都用回溯法是较为方便的。

排列回溯是交换位置然后记录,回溯,接着交换。

组合回溯是 是否把当前数字加入到结果中。

cpp 复制代码
#include <vector>
#include <iostream>
using namespace std;

void backtracking(vector<vector<int>>& ans, vector<int>& comb,
    int& count, int pos, int n, int k) {
    if (count == k) {
        ans.push_back(comb);
        return;
    }
    for (int i = pos; i <= n; ++i) {
        comb[count++] = i;  //修改当前节点
        backtracking(ans, comb, count, i + 1, n, k);    //递归子节点
        --count;    //回改当前节点状态
    }
}

vector<vector<int>> combine(int n , int k) {
    vector<vector<int>> ans;
    vector<int> comb(k, 0);
    int count = 0;
    backtracking(ans, comb, count, 1, n, k);
    return ans;
}

int main() {
    int n = 4, k = 2;
    vector<vector<int>> res = combine(n, k);

    cout << "[";
    for (int i = 0; i < res.size(); ++i) {
        if (i > 0) cout << ", ";
        cout << "[" << res[i][0] << ", " 
                    << res[i][1] << "]";
    }
    cout << "]" << endl;

    return 0;
}
相关推荐
漫随流水9 分钟前
c++编程:反转字符串(leetcode344)
数据结构·c++·算法
穿条秋裤到处跑2 小时前
每日一道leetcode(2026.03.31):字典序最小的生成字符串
算法·leetcode
CoovallyAIHub4 小时前
VisionClaw:智能眼镜 + Gemini + Agent,看一眼就能帮你搜、帮你发、帮你做
算法·架构·github
Titan20244 小时前
map和set的封装学习笔记
数据结构·c++
CoovallyAIHub4 小时前
低空安全刚需!西工大UAV-DETR反无人机小目标检测,参数减少40%,mAP50:95提升6.6个百分点
算法·架构·github
CoovallyAIHub4 小时前
IEEE Sensors | 湖南大学提出KGP-YOLO:先定位风电叶片再检测缺陷,三数据集mAP均超87%
算法
Yupureki4 小时前
《算法竞赛从入门到国奖》算法基础:动态规划-路径dp
数据结构·c++·算法·动态规划
副露のmagic5 小时前
数组章节 leetcode 思路&实现
算法·leetcode·职场和发展
荣光属于凯撒5 小时前
P2176 [USACO11DEC] RoadBlock S / [USACO14FEB] Roadblock G/S
算法·图论
雨季mo浅忆5 小时前
记录利用Cursor快速实现拖拽式问卷题型创建
算法