zoukankan      html  css  js  c++  java
  • leetcode77

     1 class Solution {
     2     public List<List<Integer>> combine(int n, int k) {
     3         List<List<Integer>> combinations = new ArrayList<>();
     4         List<Integer> combineList = new ArrayList<>();
     5         backtracking(combineList, combinations, 1, k, n);
     6         return combinations;
     7     }
     8 
     9     private void backtracking(List<Integer> combineList, List<List<Integer>> combinations, int start, int k, final int n) {
    10         if (k == 0) {
    11             combinations.add(new ArrayList<>(combineList));
    12             return;
    13         }
    14         for (int i = start; i <= n - k + 1; i++) {  // 剪枝
    15             combineList.add(i);
    16             backtracking(combineList, combinations, i + 1, k - 1, n);
    17             combineList.remove(combineList.size() - 1);
    18         }
    19     }
    20 }

    这道题目是求组合,因此[1,2]与[2,1]算是重复的,只保留一种。

    按照14行,每次都从当前位置“向后”寻找,就不会重复了。

    补充一个python的实现:

     1 class Solution:
     2     def backTrack(self,lists,index,k,n,temp,res):
     3         if 0 == k:
     4             res.append(temp[:])
     5             return
     6         for i in range(index,n-k+2):
     7             temp.append(i)
     8             self.backTrack(lists,i+1,k-1,n,temp,res)
     9             temp.pop(-1)
    10         
    11     def combine(self, n: int, k: int) -> List[List[int]]:
    12         lists = list(range(1,n+1))
    13         res = []
    14         self.backTrack(lists,1,k,n,[],res)
    15         return res

    注意加颜色的变量和判断条件,可以加速。

  • 相关阅读:
    第一部分 android display(sufaceflinger & overlay)
    UML类图关系大全
    第二部分 MediaPlayer的接口与架构
    Climbing Stairs
    Add Binary
    Plus One
    Unique Paths
    Length of Last Word
    Count and Say
    Valid Sudoku
  • 原文地址:https://www.cnblogs.com/asenyang/p/10997940.html
Copyright © 2011-2022 走看看