You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否使用Go语言slice解包特性简化布尔列表全排列生成函数?

结论

可以通过Go的slice解包特性大幅简化permutations函数,核心是利用append的可变参数解包语法append(slice, elements...)替代原代码中冗余的内层遍历拼接逻辑。

简化方案

原代码中为了在每个子排列头部拼接true/false,额外写了一层内层for循环逐个追加子排列的元素,这部分逻辑可以用slice解包一步完成,简化后的完整实现如下:

package main

import "fmt"

func permutations(m int) [][]bool {
    if m == 0 {
        panic("CRASH")
    }
    if m == 1 {
        return [][]bool{{true}, {false}}
    }

    retVal := [][]bool{}
    for _, x := range permutations(m - 1) {
        // x... 就是slice解包语法,直接将x的所有元素展开追加到新切片
        retVal = append(retVal, append([]bool{true}, x...))
        retVal = append(retVal, append([]bool{false}, x...))
    }
    return retVal
}

func main() {
    fmt.Println("Hello, playground")
    m := permutations(3)
    fmt.Println("m = ", m)
}

效果说明

简化后的实现和原逻辑完全等价,输出结果一致,没有额外性能开销,仅去掉了冗余的内层循环代码,可读性更高。

内容的提问来源于stack exchange,提问作者Saqib Ali

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 08:36:02