题目:
给定一个 n × n 的二维矩阵 matrix 表示一个图像。请你将图像顺时针旋转 90 度。
你必须在 原地 旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要 使用另一个矩阵来旋转图像。
来源:力扣(LeetCode)
链接:leetcode.cn/problems/ro…
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
解法:
找到翻转的规律,坐标(i,j)是从左往右,从上往下数。
进行一次旋转之后的坐标为:
根据这个规律计算出反转后所有的坐标:
写代码就简单了
func rotate(matrix [][]int) {
n := len(matrix) - 1
maxLevel := n
minLevel := 0
for i:= 0; i < n && minLevel < maxLevel ; i = i + 1 {
for j := i; j < maxLevel ; j = j + 1 {
tmp := getAndSet(matrix, i, j, matrix[n - j][minLevel])
tmp = getAndSet(matrix, j , maxLevel, tmp)
tmp = getAndSet(matrix, maxLevel , n - j, tmp)
tmp = getAndSet(matrix, n - j , minLevel, tmp)
// fmt.Println(matrix)
}
maxLevel --
minLevel ++
// fmt.Println("++++", maxLevel,minLevel )
}
}
func getAndSet(matrix [][]int, i, j, val int) int{
tmp := matrix[i][j]
matrix[i][j] = val
return tmp
}