欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

python实现旋转图像

程序员文章站 2024-03-22 14:30:28
...

问题描述

给定一个 n × n 的二维矩阵表示一个图像。

将图像顺时针旋转 90 度。

说明:

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

示例 1:

给定 matrix = [ [1,2,3], [4,5,6], [7,8,9] ],

原地旋转输入矩阵,使其变为: [ [7,4,1], [8,5,2], [9,6,3] ] 示例 2:

给定 matrix = [ [ 5, 1, 9,11], [ 2, 4, 8,10], [13, 3, 6, 7],
[15,14,12,16] ],

原地旋转输入矩阵,使其变为: [ [15,13, 2, 5], [14, 3, 4, 1], [12, 6, 8, 9],
[16, 7,10,11] ]

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

1、思路

  实质上是行列交换问题:首先将行转成每一列,然后将每一列逆序输出即可。

2、代码

# -*- coding: utf-8 -*-
'''
问题简述:
    将一个n*n的二维矩阵顺时针旋转90度。
基本思路:
    假设输入数组大小是3*3,通过观察前后的结果可以看出:
    实质上就是一个行列转换的问题,将行转变成列。
    但是有一个细节: 每次左上角元素不变,而交换其余元素的值。
'''
class Solution():
    '''
    input: list
    output: list
    '''
    def rotateImg(self,matrix):
        for i in range(len(matrix)):
            for j in range(i,len(matrix)):
                matrix[i][j],matrix[j][i] = matrix[j][i],matrix[i][j]
        for i in range(len(matrix)):
            matrix[i].reverse()
        return matrix
if __name__ == '__main__':
    matrix =[[1,2,3], [4,5,6], [7,8,9]]
    solu = Solution()
    res = solu.rotateImg(matrix)
    print('最终结果为:\n',res)

总结

a. 17行代码中,一开始变量 j 是从0开始循环,但是发现会导致交换前后结果一样,原因是前面交换过一次了。因此,变量 j 实质上从 i 循环,即每次交换的都是没有交换过的元素,交换过的就不动了。
b. 20行代码,一开始没加 matrix [i] .reverse() , 实质上导致完成的的是 行交换。