一、题目
给定两个整数 n 和 k,返回 1 … n 中所有可能的 k 个数的组合。
二、回溯算法分析
该题是典型的组合问题,所以考虑用回溯法解决
把组合问题抽象为如下树形结构:
可以看出这个棵树,一开始集合是 1,2,3,4, 从左向右取数,取过的数,不在重复取
第一次取1,集合变为2,3,4 ,因为k为2,我们只需要再取一个数就可以了,分别取2,3,4,得到集合[1,2] [1,3] [1,4]
,以此类推。
每次从集合中选取元素,可选择的范围随着选择的进行而收缩,调整可选择的范围
图中可以发现n相当于树的宽度,k相当于树的深度
图中每次搜索到了叶子节点,我们就找到了一个结果
相当于只需要把达到叶子节点的结果收集起来,就可以求得 n个数中 k 个数的组合集合
回溯法模板解题:
(1