leetcode:216.组合总和三
题目理解:
在组合的基础上,考虑组合的总和为n。
最直白的暴力方法是for循环嵌套n层,但是代码无法实现,因为n不确定。所以我们可以用递归几层来相当于循环嵌套几层实现。
树形结构:
for循环是按照[1,9]这个范围,树的宽度
深度是k,树的深度
代码:
1.定义path和result数组
2.参数targetSum,k,Sum,startIndex(初始化为1).
3.如果path的长度为而且targetSum和Sum相等,加入结果集
4.进入for循环后,计算Sum,新元素加入path,进入递归,重置Sum,弹出元素实现回溯。
剪枝操作:
1.在最前面判断targetSum和Sum的大小,若Sum已经大于targetSum,直接return
2.path长度不够k的话,直接剪枝。通过使得for循环里的i<=9变为i<=(9-(k-path.size)+1)即可。