(回溯法)LeetCode#77. Combinations

来源:互联网 发布:美萍进销存软件客服 编辑:程序博客网 时间:2024/05/16 05:28
  • 题目:给定两个数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);//回退到上一步            }        }    }}
0 0
原创粉丝点击