48.M 旋转图像
Problem: 48. 旋转图像
思路
思路1:用一个辅助数组暂存结果,最后再把辅助数组赋值给原数组。最关键的就是找到元素间的移动关系[i][j] => [j][col-i-1]
思路2:原地移动。最主要的是要解决覆盖问题,根据移动关系可得到位置[i][j]
的元素需要被赋值为位置[col-j-1][i]
的值,最后发现四次赋值后回到了起点,因为我们可以实现原地旋转。
Code
代码1:
func rotateV1(matrix [][]int) {
temp := make([][]int, len(matrix))
for i := 0; i < len(matrix); i++ {
temp[i] = make([]int, len(matrix[0]))
}
for i, row := range matrix {
for j, v := range row {
temp[j][len(matrix)-i-1] = v
}
}
copy(matrix, temp)
}
代码2:
func rotate(matrix [][]int) {
n := len(matrix)
for i := 0; i < n/2; i++ {
for j := 0; j < (n+1)/2; j++ {
temp := matrix[i][j]
matrix[i][j] = matrix[n-j-1][i]
matrix[n-j-1][i] = matrix[n-i-1][n-j-1]
matrix[n-i-1][n-j-1] = matrix[j][n-i-1]
matrix[j][n-i-1] = temp
}
}
}
Last updated
Was this helpful?