题解 | #牛棚分组#
牛棚分组
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,我们将其加入结果列表中。