题目链接: 77. 组合
题目链接/文章讲解: 代码随想录
看完代码随想录之后的想法:
使用回溯的模板来解决问题,不过我们需要小心一下for循环里面元素集合的范围,我们注意for循环里面元素开始时不确定的,因此我们需要使用一个startIndex来确定元素开始的值;同时我们需要做一下剪枝,例如我们需要找到5个数,但是我们path里面有了1个元素,然而如果我们下一个元素选择最后一个元素,肯定不可以凑够5个,因此我们需要剪枝,path里面已经有path.size()个,我们还需要k - path.size() 个数,那么我们我们的元素至多到 n - (k - path.size()) + 1;
今日收获
今天学习到了回溯三部曲
一 :返回值,和参数;
二 :终止条件;
三 :单次循环逻辑{
for循环;{
处理节点;
递归;
回溯;
}
}
单词循环逻辑中的for循环是每一层元素的集合;
每一次递归,都是树往深层走,for循环是树的宽度;