今天开始进入了回溯算法的练习,经历了二叉树的递归洗礼,已经对回溯有了一个大概的认识了,回溯函数就是递归函数。
回溯并不是一个高效的算法,可以说是纯暴力,但是有些恶心的问题只能通过回溯来解决。
带你学透回溯算法(理论篇)| 回溯法精讲!_哔哩哔哩_bilibili
给定两个整数 n
和 k
,返回范围 [1, n]
中所有可能的 k
个数的组合。
你可以按 任何顺序 返回答案。
自己按照回溯的模板尝试写了,但是发现输出出来的不是组合,而是排列。显示剪枝的地方出现了问题,先去看视频学习一下:
带你学透回溯算法-组合问题(对应力扣题目:77.组合)| 回溯法精讲!_哔哩哔哩_bilibili
看着看着就悟了,理解了这种剪枝情况需要使用startindex进行辅佐,于是再次画图模拟,然后尝试写:
定义回溯函数,依然是确定终止条件当path数值长度为k时result数值添加path数值,返回,只不过for循环遍历的时候需要进行剪枝控制,因此直接将起始位置定义为startindex,在递归中控制将 startindex自增。然后进行回溯就可以了。