注意题目给出的条件
- 矩阵行数和列数相等
思路
从外向内,一圈一圈处理。
在处理某一圈时,
- 先把这一圈的左上角的数赋值给temp变量(相当于挖了一个“坑”)
- 然后将右上角的数放入左上角
- 然后将右下角的数放入右上角
- 然后将左下角的数放入右下角
- 然后将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++
}
}