77. 组合
思路:res记录所有结果,path记录每个组合。每一个递归就是一个for循环。由于是找组合,递归函数中设置starIndex来让让找到的组合都是排除顺序外不重复的。递归后记得要弹出之前加入的元素。
优化:剪枝操作,for循环中限制遍历的第一个元素的范围。这样在某些情况下减少遍历达不到长度为k的组合的遍历。
216.组合总和III
思路:和77思路差不多,递归函数里包含targetSum和sum参数。剪枝操作分为树形结构的横向和竖向的元素限制。sum>targetSum或者元素已经达不到要求的k个数,都进行剪枝操作。
17.电话号码的字母组合
思路:递归函数包括index参数,index指的是递归遍历到哪个号码了,不需要像上面startIndex一样为了去重。
优化:隐藏回溯。参数里再传入s+letter[i],因为最终s是不变的,不需要递归函数后面再踢出元素操作。