继续打卡算法题,今天学习的是LeetCode第77题组合,这道题目是道中等题
。算法题的一些解题思路和技巧真的非常巧妙,每天看一看算法题和解题思路,我相信对我们的编码思维和编码能力有一些提升。
分析一波题目
哈哈哈,之前做过组合相关的题目,这个题目就非常简单了,还是一样的套路,我们只要把组合想成一棵树遍历就可以了。
比如 n=4 k=2。
本题解题技巧
1、将组合问题转换为遍历树的问题,组合问题都可以将其先转换成树形结构,再看是否可以求解。
编码解决
class Solution {
public List<List<Integer>> combine(int n, int k) {
List<List<Integer>> result = new ArrayList<>();
List<Integer> subResult= new ArrayList<>();
getSubResult(result, subResult, 0,n, k);
return result;
}
public void getSubResult(List<List<Integer>> result, List<Integer> subResult,int start,int n, int k) {
//满足了组合条件
if(subResult.size() == k) {
result.add(subResult);
return;
}
for(int i=start; i<n; i++) {
List<Integer> tempSubResult= new ArrayList<>();
tempSubResult.addAll(subResult);
tempSubResult.add(i+1);
//递归
getSubResult(result, tempSubResult, i+1,n, k);
}
}
}
总结
1、记住组合问题都可以先转换成树,脑袋里可以把组合组成的过程,转换成一棵树遍历过程。