题解 | #牛棚分组#
牛棚分组
https://www.nowcoder.com/practice/d5740e4dde3740828491236c53737af4?tpId=354&tqId=10594669&ru=/exam/oj&qru=/ta/interview-202-top/question-ranking&sourceUrl=%2Fexam%2Foj%3Fpage%3D1%26tab%3D%25E7%25AE%2597%25E6%25B3%2595%25E7%25AF%2587%26topicId%3D354
import java.util.*;
public class Solution {
ArrayList<ArrayList<Integer>> lists = new ArrayList<ArrayList<Integer>>();
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param n int整型
* @param k int整型
* @return int整型二维数组
*/
public int[][] combine (int n, int k) {
// write code here
search(1,k,n,new ArrayList<>());
int[][] arr = new int[lists.size()][k];
for(int i=0;i<lists.size();i++){
for(int j=0;j<lists.get(i).size();j++){
arr[i][j] = lists.get(i).get(j);
}
}
return arr;
}
private void search(int cur,int cap,int n,ArrayList<Integer> list){
if(list.size()==cap){
lists.add(new ArrayList<>(list));
return;
}
if(cur>n){
return;
}
list.add(cur);
search(cur+1,cap,n,list);
list.remove(list.size()-1);
search(cur+1,cap,n,list);
}
}
知识点分析:
- 回溯算法:通过递归生成所有可能的组合。
- 递归:在每一步中,向组合中添加一个元素,然后递归继续处理剩余元素。
- 限制条件:每个组合的大小需要等于 k。
解题思路:
代码中,我们使用回溯算法递归地生成所有可能的组合。对于每个元素,我们可以选择将其添加到当前组合中,然后继续递归地处理剩余元素。一旦组合的大小达到 k,我们将其加入结果列表中。
