leetcode 48. 旋转图像

102 阅读1分钟

题目链接

注意题目给出的条件

  • 矩阵行数和列数相等

思路

从外向内,一圈一圈处理。
在处理某一圈时,

  1. 先把这一圈的左上角的数赋值给temp变量(相当于挖了一个“坑”)
  2. 然后将右上角的数放入左上角
  3. 然后将右下角的数放入右上角
  4. 然后将左下角的数放入右下角
  5. 然后将temp(左上角的数)的值放入左下角 然后再按上述顺序,从左上角的右边那个格子再处理一次。
    注意控制好边界
func rotate(matrix [][]int)  {
    rows := len(matrix)
	if rows == 0 {
		return
	}
	cols := len(matrix[0])
	if cols == 0 {
		return
	}
	if rows != cols {
		return
	}
	var (
		up int
		right = cols-1
		down = rows-1
		left int
	)
	for left < right && up < down {
		var (
			upRow = up
			upCol = left
			rightRow = up
			rightCol = right
			downRow = down
			downCol = right
			leftRow = down
			leftCol = left
		)
		for upCol < right && rightRow < down && downCol > left && leftRow > up {
			temp := matrix[upRow][upCol]
			matrix[upRow][upCol] = matrix[leftRow][leftCol]
			matrix[leftRow][leftCol] = matrix[downRow][downCol]
			matrix[downRow][downCol] = matrix[rightRow][rightCol]
			matrix[rightRow][rightCol] = temp
			upCol++
			rightRow++
			downCol--
			leftRow--
		}
		right--
		down--
		left++
		up++
	}
}