(回溯法)LeetCode#77. Combinations

xiaoxiao2021-02-28  49

题目:给定两个数n,k 从1到n这n个数中选择k个组成一个组合(不能重复)

例如 n=4,k=2 则相应的组合有[[1,2],[1,3],[1,4],[2,3],[2,4],[3,4]] 思路:显然这种类型的题目都需要用回溯法来做。找到结束条件至关重要,对于此题 当 k < 0或者n-start + 1 < k的时候需要结束本次递归,当k=0的时候,说明这一个解已经找到(将解加入到列表里)难度:Medium代码: public class Solution { public List<List<Integer>> combine(int n, int k) { List<List<Integer>> result = new ArrayList<>(); if(k == 0){ return result; } if(n < k){ return result; } backtrack(result, new ArrayList<>(), n, k,1); return result; } private void backtrack(List<List<Integer>> result, List<Integer> list, int n, int k, int start){ if(k < 0 || n-start < k-1){ return; }else if(k == 0){ result.add(new ArrayList<>(list)); }else{ for(int i = start; i <= n; i++){ list.add(i); backtrack(result, list, n, k-1, i+1);//下一次的start是数组的下一个值 list.remove(list.size()-1);//回退到上一步 } } } }
转载请注明原文地址: https://www.6miu.com/read-76218.html

最新回复(0)