当前位置:   article > 正文

算法训练营day21,回溯1

算法训练营day21,回溯1

77. 组合

func combine(n int, k int) [][]int {

  //存储全部集合

  result := make([][]int, 0)

  //存储单次集合

  path := make([]int, 0)

  var backtrace func(n int, k int, startIndex int)

  backtrace = func(n int, k int, startIndex int) {

    //当单次集合大小和k值相等,找到本次集合,但path需要一直使用需要用temp临时存储然后赋给result

    if len(path) == k {

      temp := make([]int, k)

      copy(temp, path)

      result = append(result, temp)

      return

    }

    for i := startIndex; i <= n; i++ {

      if n-i+1 < k-len(path) { // 剪枝

        break

      }

      path = append(path, i)

      backtrace(n, k, i+1)

      //回溯处理

      path = path[:len(path)-1]

    }

  }

  backtrace(n, k, 1)

  return result

}

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Gausst松鼠会/article/detail/495993
推荐阅读
相关标签
  

闽ICP备14008679号