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?