登录
首页 >  Golang >  Go问答

Go 语言中实现矩阵旋转

来源:stackoverflow

时间:2024-02-14 17:27:24 425浏览 收藏

从现在开始,努力学习吧!本文《Go 语言中实现矩阵旋转》主要讲解了等等相关知识点,我会在golang学习网中持续更新相关的系列文章,欢迎大家关注并积极留言建议。下面就先一起来看一下本篇正文内容吧,希望能帮到你!

问题内容

我正在尝试将矩阵顺时针旋转 90°,特别是使用非就地旋转算法。我想出了这段代码:

func rotateclockwisenip(matrix [][]int) (out [][]int) {
    // create and populate a new out matrix full of zero
    nullrow := []int{}
    for i := 0; i < len(matrix); i++ {
        nullrow = append(nullrow, 0)
    }
    for i := 0; i < len(matrix); i++ {
        out = append(out, nullrow)
    }
    fmt.println(out)
    // change values accordingly
    for row := 0; row < len(matrix); row++ {
        for c := 0; c < len(matrix); c++ {
            fmt.printf("the matrix element %v %v goes to out element %v %v\n", row, c, c, len(matrix)-1-row)
            out[c][len(matrix)-1-row] = matrix[row][c]
            fmt.println(out)
        }
    }
    return
}

这个想法是获取每一行并将其作为新矩阵中的列。例如,第一行将是最后一列,第二行将是倒数第二列,依此类推。 现在代码可以工作,但不符合预期。打印矩阵 [][]int{{1,2},{3,4} 的结果如下:

[[0 0] [0 0]]
the matrix element 0 0 goes to out element 0 1
[[0 1] [0 1]]
the matrix element 0 1 goes to out element 1 1
[[0 2] [0 2]]
the matrix element 1 0 goes to out element 0 0
[[3 2] [3 2]]
the matrix element 1 1 goes to out element 1 0
[[4 2] [4 2]]

您可以看到每个赋值在两行上重复,而不是仅在 out 矩阵中的正确位置重复。 关于为什么会发生这种情况的任何提示? 非常感谢!

------------------------------------------------------------ - 编辑 - - - - - - - - - - - - - - - - - - - - - - - - -----

好吧,显然问题出在第一部分。交换

nullrow := []int{}
    for i := 0; i < len(matrix); i++ {
        nullrow = append(nullrow, 0)
    }
    for i := 0; i < len(matrix); i++ {
        out = append(out, nullrow)
    }

对于

for i := 0; i < len(matrix); i++ {
    out = append(out, []int{})
    for j := 0; j < len(matrix); j++ {
        out[i] = append(out[i], 0)
    }
}

解决了问题。不过,我会留下这个问题,因为我真的不明白第一种方法出了什么问题。


正确答案


您将在第一种方法中将相同的切片 nullRow 附加到所有行。 Slice 具有带有指针的基础值。因此所有行都具有相同的值。

今天关于《Go 语言中实现矩阵旋转》的内容就介绍到这里了,是不是学起来一目了然!想要了解更多关于的内容请关注golang学习网公众号!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>