author:魏静崎
2024年10月16日
算法
组合
组合就是从n个中选取k个的枚举。
使用递归回溯的办法进行,每一层选取一个元素,并创建新的分支,递归到k层即可停止。
1. 组合之间不能重复,因此需要剪枝,向下一层递归时,候选元素只选取大于当前值的节点,可以切片也可以加入current_val作为记录。
2. 但是这样会出现元素不足的情况,如还需要两个元素,但是只有一个大于当前元素的值,因此还需要判断元素的个数是否足够,如果可以使用1-n的所有元素则,候选数组范围为[cur_val, n-(k-depth)+1]
1 | func combine(n int, k int) [][]int { |
- **
tmp...
**:这是一个切片展开语法(spread syntax),用于将切片tmp
的元素逐个添加到新切片中。这个语法的作用是将tmp
中的所有元素传递给append
函数。
排列
排列就是一次选取一个元素,将列表中的其他元素传给下一层即可。
1 | func permute(nums []int) [][]int { |
- 本文作者: 魏静崎
- 本文链接: https://slightwjq.github.io/2024/10/16/排列组合/
- 版权声明: 该文章来源及最终解释权归作者所有