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;
}
相关推荐
anew___7 分钟前
《从零手写操作系统 (30):环境变量与进程上下文——export/unset与继承语义》
java·开发语言·网络·jvm·算法
垆边人似月.18 分钟前
城市连通性(200分 / 并查集)
数据结构·算法·图论
Gust of wind34 分钟前
串与KMP模式匹配:存储结构、基本操作、next数组手算
c语言·数据结构·后端·算法
Navigator_Z40 分钟前
LeetCode //C - 1283. Find the Smallest Divisor Given a Threshold
c语言·算法·leetcode
by209991 小时前
list:迭代器与资源管理实现的综合叙述(下)
数据结构·c++·笔记·list
啦啦啦啦啦zzzz1 小时前
一致性哈希
服务器·算法·哈希算法·c++20·分布式存储
我不会起名字3221 小时前
二叉树的遍历与二叉搜索树:把递归、迭代、还原树一次讲透
数据结构·leetcode·二叉树·二叉搜索树
垆边人似月.1 小时前
嵌入式传感器寄存器数据解析
算法
Tingmanyi2 小时前
YOLOv13改进策略【卷积层篇】| RFAConv 感受野注意力卷积,每个位置都值得被单独加权
深度学习·算法·yolo·目标检测·计算机视觉
yi0112 小时前
Leetcode 49 用 “身份证‘‘巧解
人工智能·笔记·python·算法·leetcode·哈希表