zoukankan      html  css  js  c++  java
  • 递归和回溯_leetcode77-经典的组合

    class Solution(object):
    def combine(self, n, k):
    """
    :type n: int
    :type k: int
    :rtype: List[List[int]]
    """
    self.res = []

    if not n or k > n or k <= 0:
    return self.res

    self.generateCombinations(n,k,1,[])

    return self.res


    # 求解C(n,k) ,当前已经找到的组合存储在c中,需要从start开始搜索新的元素
    def generateCombinations(self,n,k,start,ans):

    if len(ans) == k:
    self.res.append(ans[0:])
    return

    for i in range(start,n+1):

    ans.append(i)
    self.generateCombinations(n,k,i+1,ans)
    ans.pop()



    # 剪支,就是减少 for 循环的上限

    class Solution2(object):
    def combine(self, n, k):
    """
    :type n: int
    :type k: int
    :rtype: List[List[int]]
    """
    self.res = []

    if not n or k > n or k <= 0:
    return self.res

    self.generateCombinations(n,k,1,[])

    return self.res


    # 求解C(n,k) ,当前已经找到的组合存储在ans中,需要从start开始搜索新的元素
    def generateCombinations(self,n,k,start,ans):

    if len(ans) == k:
    self.res.append(ans[0:])
    return

    # 还有k-len(ans)个空位,[i,…,n]中至少还有 k-len(ans)个元素
    # i最多为 n -(k-len(ans)) + 1

    for i in range(start,n-(k-len(ans))+2):

    ans.append(i)
    self.generateCombinations(n,k,i+1,ans)
    ans.pop()
  • 相关阅读:
    linux升级node版本
    mysql视图
    mysql全文本搜索
    mysql数据处理函数
    mysql数据分组
    mysql组合查询
    Django添加生产环境配置
    费用保险单,如何失焦时自动补零
    div+css滚动条
    phpadmin导入数据提示文件最大限制的修改方法
  • 原文地址:https://www.cnblogs.com/lux-ace/p/10556973.html
Copyright © 2011-2022 走看看