48. 旋转图像

102 阅读1分钟

题目:
给定一个 n × n 的二维矩阵 matrix 表示一个图像。请你将图像顺时针旋转 90 度。

你必须在 原地 旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要 使用另一个矩阵来旋转图像。

来源:力扣(LeetCode) 链接:leetcode.cn/problems/ro… 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
解法: 找到翻转的规律,坐标(i,j)是从左往右,从上往下数。

image.png 进行一次旋转之后的坐标为:

image.png 根据这个规律计算出反转后所有的坐标:

image.png 写代码就简单了

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
}