【问题标题】:How can I compare values in 2D array with values in 1D array in GoLang?如何将二维数组中的值与 GoLang 中的一维数组中的值进行比较?
【发布时间】:2021-02-13 04:34:06
【问题描述】:

我需要比较一维数组和二维数组的值,并使用 Go 返回具有相似值的结果数组:

func absolutePermutation(n int32, k int32) []int32 {
    var position []int32

    var i, j int32
    var result []int32
    for i = 1; i <= n; i++ {
        position[i-1] = i
    }

    x := getPermutations(position)
    resVal := permNum(n)
    fmt.Println(x)

    for i = 0; i < resVal; i++ {

        for j = 0; j < 4; j++ {

            fmt.Println(x[i][j])

            **if int32(math.Abs(float64(position[(j*resVal)+i])-float64(x[i][j]))) == k** {
                result[i] = x[i][j]
            } else {
                continue
            }
        }
    }

    return result
}

func getPermutations(elements []int32) [][]int32 {
    permutations := [][]int32{}
    if len(elements) == 1 {
        permutations = [][]int32{elements}
        return permutations
    }
    for i := range elements {
        el := make([]int32, len(elements))
        copy(el, elements)

        for _, perm := range getPermutations(append(el[0:i], el[i+1:]...)) {
            permutations = append(permutations, append([]int32{elements[i]}, perm...))
        }
    }
    return permutations
}


func permNum (n int32) int32 {

    if n == 0 {
        return 1
    } 
    
    return n * permNum(n-1)
}

我尝试创建位置(此处将一维数组转换为二维数组。)但它没有意义。 作为 GoLang 的新手,我在这段代码中遇到了这个错误,该代码是为了获取给定数字的排列而编写的:

运行时错误:索引超出范围 [0],长度为 0

【问题讨论】:

    标签: arrays go int32 absolute-value type-2-dimension


    【解决方案1】:

    我在一定程度上解决了。你可以参考这个。

     func absolutePermutation(n int32, k int32) []int32 {
            var buffer [1024 * 1024]int32
            position := buffer[0:n]
            result := make([]int32, n)    
            var i, j int32
        
        for i = 1; i <= n; i++ {
            position[i-1] = i
        }
        x := getPermutations(position)
    
        for i = 0; i < permNum(n); i++ {
            for j = 0; j < n; j++ {  
                if int32(math.Abs(float64(position[j])-float64(x[i][j]))) == k {
                    result[j] = x[i][j]
                    if j==n-1{
                        return result
                    }       
                }else{
                break
                }
            }
        }
        result = nil
        return result    
    }
    

    【讨论】:

      猜你喜欢
      • 2017-10-22
      • 2012-04-13
      • 2022-01-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-19
      • 2017-01-07
      相关资源
      最近更新 更多