相关思路
第二次刷y总的视频,我感觉理解了很多。
看注释。
相关代码
class Solution {
List<List<Integer>> a; //存放所有路径
List<Integer> path; //存放单条路径
boolean st[] = new boolean [22]; //存放状态
public List<List<Integer>> combine(int n, int k) {
a = new ArrayList<>();
path = new ArrayList<>();
dfs(n,k,1,1,path);
return a;
}
//u表示的是所在位置,start从哪个元素开始遍历,
public void dfs(int n,int k,int u,int start,List<Integer> path){
if(u == k+1){
a.add(new ArrayList<>(path));
return;
}
//将nums数组进行遍历,而不是位置,挑出第一个没被选过的元素。
for(int i=start;i<=n;i++){
if(!st[i]){
st[i]=true;
path.add(i);
dfs(n,k,u+1,i+1,path);
st[i]=false;
path.remove(path.size()-1);
}
}
}
}