【力扣】【初级算法】【数组11】旋转图像

题目

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

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

作者:力扣 (LeetCode)
链接:https://leetcode.cn/leetbook/read/top-interview-questions-easy/xnhhkv/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

思路

class Solution {
    public void rotate(int[][] matrix) {
        //旋转图像 注意不让开辟新数组
        //以左上角为例,左上角元素旋转后会到右上角,右上角的元素会到右下角,右下角会去左下角。
        //所以旋转要注意的就是赋值时避免覆盖掉原本的值,所以我们就需要转一圈赋值
        //转一圈赋值 注意只需要遍历一般,因为另一半在避免覆盖的时候已经对他进行了操作
        
        int n = matrix.length;
        //偶数直接除二就是一半,奇数除二会把最中间的漏掉,但是最中间的也刚好不需要旋转。
        for(int i=0;i<n/2;i++){
            for(int j=0;j<(n+1)/2;j++){
                int temp = matrix[i][j];
                matrix[i][j] = matrix[n-j-1][i];
                matrix[n-j-1][i] = matrix[n-i-1][n-j-1];
                matrix[n-i-1][n-j-1] = matrix[j][n-i-1];
                matrix[j][n-i-1]=temp;

            }

        }

    }
}
class Solution(object):
    def rotate(self, matrix):
        """
        :type matrix: List[List[int]]
        :rtype: None Do not return anything, modify matrix in-place instead.
        """
        n = len(matrix)
        for i in range(n/2):
            for j in range((n+1)/2):
                temp = matrix[i][j]
                matrix[i][j] = matrix[n-j-1][i]
                matrix[n-j-1][i] = matrix[n-i-1][n-j-1]
                matrix[n-i-1][n-j-1] = matrix[j][n-i-1]
                matrix[j][n-i-1] = temp


你可能感兴趣的:(leetcode,算法,leetcode,职场和发展)