美文网首页Go语言实践Go
Golang 数组穷举所有组合(不交叉顺序)

Golang 数组穷举所有组合(不交叉顺序)

作者: 承诺一时的华丽 | 来源:发表于2019-10-30 09:36 被阅读0次
  • 用途描述:一组数组 [1, 2, 3],需计算出该数组所有不交叉顺序的组合

[1]
[2]
[3]
[1,2]
[2,3]
[1,3]
[1,2,3]

  • 穷举算法
func getArrayExhaustivity(arr []string) (result [][]string) {
    var l = int(math.Pow(float64(2), float64(len(arr))) - 1)
    var t []string
    for i := 1; i <= l; i++ {
        s := i
        t = []string{}
        for k := 0; s > 0; k++ {
            if s&1 == 1 {
                t = append(t, arr[k])
            }
            s >>= 1
        }
        result = append(result, t)
    }
    return
}
  • 示例代码1
func TestArrayExhaustivity(t *testing.T) {  
    result := getArrayExhaustivity([]string{"1", "2", "3"})
    str, err := json.Marshal(result)
    if err != nil {
        t.Fatal(err)
    }
    println(string(str))
}
  • 示例结果1
=== RUN   TestArrayExhaustivity
[["1"],["2"],["1","2"],["3"],["1","3"],["2","3"],["1","2","3"]]
--- PASS: TestArrayExhaustivity (0.00s)
PASS

Process finished with exit code 0
  • 示例代码2
func TestArrayExhaustivity(t *testing.T) {
    result := getArrayExhaustivity([]string{"1", "2", "3", "4"})
    str, err := json.Marshal(result)
    if err != nil {
        t.Fatal(err)
    }
    println(string(str))
}
  • 示例结果2
=== RUN   TestArrayExhaustivity
[["1"],["2"],["1","2"],["3"],["1","3"],["2","3"],["1","2","3"],["4"],["1","4"],["2","4"],["1","2","4"],["3","4"],["1","3","4"],["2","3","4"],["1","2","3","4"]]
--- PASS: TestArrayExhaustivity (0.00s)
PASS

Process finished with exit code 0
  • 根据长度冒泡排序
func arrayLenSort(result [][]string) [][]string {
    for i := 0; i < len(result); i++ {
        for j := i + 1; j < len(result); j++ {
            if len(result[i]) < len(result[j]) {
                tmp := result[i]
                result[i] = result[j]
                result[j] = tmp
            }
        }
    }
    return result
}
  • 示例代码3
func TestArrayExhaustivitySort(t *testing.T) {
    result := getArrayExhaustivity([]string{"1", "2", "3", "4"})
    result = arrayLenSort(result)
    str, err := json.Marshal(result)
    if err != nil {
        t.Fatal(err)
    }
    println(string(str))
}
  • 示例结果3
=== RUN   TestArrayExhaustivitySort
[["1","2","3","4"],["1","2","4"],["1","3","4"],["2","3","4"],["1","2","3"],["2","4"],["1","3"],["3","4"],["2","3"],["1","2"],["1","4"],["4"],["2"],["1"],["3"]]
--- PASS: TestArrayExhaustivity (0.00s)
PASS

Process finished with exit code 0

相关文章

  • Golang 数组穷举所有组合(不交叉顺序)

    用途描述:一组数组 [1, 2, 3],需计算出该数组所有不交叉顺序的组合 [1][2][3][1,2][2,3]...

  • 46. Permutations 全排列

    题目 给定一个不重复数组 nums ,返回所有可能的排列组合。可以以任意顺序返回。 解析 求一个数组的全排列,即是...

  • Golang数组与切片

    Golang数组与切片 数组的声明 Golang中的数组属于静态数组,不允许动态扩展 Golang中数组会默认初始...

  • array_values()-返回由 所有原数组键值构成的 索引

    array_values() 返回由 原数组的所有键值 组成的 索引数组,返回数组的键值顺序同原数组的书写顺序; ...

  • 3.1.4.2并行搜索

    尽管采用网格搜索结合交叉验证的方法,来寻找更好超参数组合的过程非常耗时;然而,一旦获取比较好的超参数组合,则可以保...

  • LeetCode之Restore IP Addresses(Ko

    问题: 方法:主要思路是DFS,穷举所有可能的情况,递归所有组合,然后根据IP的规则进行过滤,即每小段只能为3位,...

  • golang进行交叉编译

    golang进行交叉编译 交叉编译即编译不同操作系统平台的可执行程序 golang执行交叉编译,只需要使用两个变量...

  • Golang 交叉编译

    [TOC] 说明 本文交叉编译需要 1.5 以上 Golang Mac 下编译 windows 64 Golang...

  • 关于24点游戏的一个简单算法-iOS

    先利用穷举法,例出所有计算公式。 再利用循环例举出4个数字的所有排列组合,调用calculate方法就能得到24点...

  • 动态规划笔记

    动态规划本质上还是需要穷举,只是在穷举过程中,需要用 dp 数组记录已求得的结果,避免重复计算子问题,优化穷举过程...

网友评论

    本文标题:Golang 数组穷举所有组合(不交叉顺序)

    本文链接:https://www.haomeiwen.com/subject/ihanvctx.html