Python 旋转图片程序

Python 旋转图片程序

在本教程中,我们将编写Python程序来解决旋转图片(矩阵)的问题。这是一个与矩阵相关的问题。让我们了解一下问题陈述。

问题陈述

一个nxn的二维矩阵表示一张图片。我们需要将图片顺时针旋转90度。我们需要使用就地操作来执行此操作,这意味着我们不需要另一个二维矩阵来进行旋转。旋转后,图片将如下所示。

示例 –

Python 旋转图片程序

示例1

Input
matrix = [[1,2,3],[4,5,6],[7,8,9]]
Output:
[[7,4,1],[8,5,2],[9,6,3]]

示例2

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

示例3

Input: matrix = [[1]]
Output: [[1]]

我们应该遵循以下约束条件 –

  • n == matrix.length == matrix[i].length
  • 1 <= n <= 20
  • -1000 <= matrix[i][j] <= 1000

解决方案1

我们将实现以下解决方案。

  • 首先,获取矩阵的行数和列数。
  • 迭代内循环和外循环,并转置矩阵。
  • 反转转置后的矩阵。

让我们看下面的代码。

示例

def rotate(matrix):
    """
    :type matrix: List[List[int]]
    :rtype: None Do not return anything, modify matrix in-place instead.
    """
  if(matrix==None or len(matrix) == 0 or len(matrix[0]) == 0):return
    for row in range(len(matrix)):
        for col in range(row):
            matrix[row][col], matrix[col][row] = matrix[col][row], matrix[row][col]
    for i,row in enumerate(matrix):
        matrix[i]=row[::-1] 
    return matrix
mat = [[1,2,3],[4,5,6],[7,8,9]]
print('The input matrix is:', mat)
print("The matrix after rotation: ", rotate(mat))

输出:

The input matrix is: [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
The matrix after rotation:  [[7, 4, 1], [8, 5, 2], [9, 6, 3]]

解释 –

在上面的代码中,我们创建了一个方法,它接受一个要旋转的矩阵。我们迭代了外部循环,它将迭代矩阵的每一行,而外部循环又迭代每一行的列。我们在内部循环中将矩阵的行变为列,列变为行。如果我们打印转置后的矩阵,它将如下所示。

for row in range(len(matrix)):
        for col in range(row):
            matrix[row][col], matrix[col][row] = matrix[col][row], matrix[row][col]
print(matrix)

这将输出以下结果 –

[[1, 4, 7], [2, 5, 8], [3, 6, 9]]

如果我们仔细观察转置矩阵,我们距离得到期望的输出只差一步。我们只需要逆转每一行。因此,我们使用 enumerate() 函数逆转了矩阵的每一行。

for i,row in enumerate(matrix):
        matrix[i]=row[::-1] 
        print(i, row)

它将会给出以下输出 –

0 [1, 4, 7]
1 [2, 5, 8]
2 [3, 6, 9]

在下一行中,我们反转了行并返回了矩阵。

让我们了解另一种解决方案。

解决方案2

在此解决方案中,我们将

  • 上下交换行,例如有n行:交换第1行和第n行,第2行和第(n-1)行,依此类推。
  • 然后找到结果矩阵的转置。

让我们了解以下示例。

示例

def rotate(matrix):
        if(matrix==None or len(matrix) == 0 or len(matrix[0]) == 0):return
        rows = len(matrix)
        cols = len(matrix[0])

        first,last = 0,rows-1

while(first

输出:

The input matrix is: [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
[[7, 8, 9], [4, 5, 6], [1, 2, 3]]
The matrix after rotation:  [[7, 4, 1], [8, 5, 2], [9, 6, 3]]

结论

在本教程中,我们解决了许多大型组织提出的有趣的Python矩阵问题之一。我们使用多个代码实现了解决方案,并进行了解释。一旦你掌握了解决方案的方法,就可以自己完成。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程