力扣 48. 旋转图像

题目

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

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

示例

力扣 48. 旋转图像_第1张图片
输入:matrix = [[1,2,3],[4,5,6],[7,8,9]]
输出:[[7,4,1],[8,5,2],[9,6,3]]

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/rotate-image
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

方法1

1、先沿对角线(\)折叠互换位置
注意第二个for循环!

2、每行翻转

Python实现
class Solution:
    def rotate(self, matrix: List[List[int]]) -> None:
        """
        Do not return anything, modify matrix in-place instead.
        """
        n=len(matrix)
        for i in range(n): #对角线
            for j in range(i):
                matrix[i][j],matrix[j][i]=matrix[j][i],matrix[i][j]
        for i in range(n): #行
            matrix[i]=matrix[i][::-1]

力扣 48. 旋转图像_第2张图片

Java实现
class Solution {
    public void rotate(int[][] matrix) {
        int row = matrix.length, col = matrix[0].length;

        //先沿对角线翻转
        for (int i = 0; i < row; i++){
            for (int j = i; j < col; j++){
                int tmp = matrix[i][j];
                matrix[i][j] = matrix[j][i];
                matrix[j][i] = tmp;
            }
        }

        //每一行翻转
        for (int i = 0; i < row; i++){
            int l = 0, r = col - 1;
            while (l <= r){
                int tmp = matrix[i][l];
                matrix[i][l] = matrix[i][r];
                matrix[i][r] = tmp;
                l++;
                r--;
            }
        }
    }
}

力扣 48. 旋转图像_第3张图片

方法2
Java实现
class Solution {
    public void rotate(int[][] matrix) {
        int len = matrix.length;
        // 由外向内一圈一圈进行旋转
        for (int i = 0; i < len / 2; i++) {
            int left = i;
            int right = len - i - 1;
            // 单圈旋转
            for (int j = 0; j < right - left; j++) {
                int tmp = matrix[left][left + j]; // 记录上值
                matrix[left][left + j] = matrix[right - j][left]; // 左值赋给上值
                matrix[right - j][left] = matrix[right][right - j]; // 下值赋给左值
                matrix[right][right - j] = matrix[left + j][right]; // 右值赋给下值
                matrix[left + j][right] = tmp; // 上值赋给右值
            }
        }
    }

在这里插入图片描述

你可能感兴趣的:(力扣,算法,python)