77. 组合
java和c++果然还是不太一样,这个对象是同一个地址一定要注意
题目:


题解:
java
class Solution {
boolean[] flag;
List<List<Integer>> list;
void dfs(int x, int start, int n, int k, List<Integer> l) {
if(x==k) {
//这里的l是一个对象,同一个地址,最后l变成什么,每一次添加进去的l都会变成最后结果结果,所以这里要new一个副本
list.add(new ArrayList<>(l));
return ;
}
for(int i=start;i<=n;i++) {
if(flag[i-1]==false) {
l.add(i);
flag[i-1]=true;
dfs(x+1, i+1, n, k, l);
flag[i-1]=false;
l.remove(l.size()-1);
}
}
}
public List<List<Integer>> combine(int n, int k) {
flag = new boolean[n];
list = new ArrayList<>();
dfs(0, 1, n, k, new ArrayList<Integer>());
return list;
}
}