旋转图像问题【python实现】

问题描述:

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

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

示例 1:

image-20220514134537101

输入:matrix = [[1,2,3],[4,5,6],[7,8,9]]
输出:[[7,4,1],[8,5,2],[9,6,3]]

示例 2:

image-20220514134552486

输入: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]]

示例 3:

输入:matrix = [[1]]
输出:[[1]]

示例 4:

输入:matrix = [[1,2],[3,4]]
输出:[[3,1],[4,2]]

实现方式:

def rotate(matrix):
    if matrix is None or len(matrix) == 1:  # 矩阵为空或为1
        return
    ls = len(matrix)  # 矩阵的高
    for i in range(int(ls / 2)):  # 索引遍历
        begin, end = i, ls - 1 - i  # 以高度中线为对称轴两数的索引
        for k in range(ls - 2 * i - 1):
            temp = matrix[end - k][begin]
            matrix[end - k][begin] = matrix[end][end - k]
            matrix[end][end - k] = matrix[begin + k][end]
            matrix[begin + k][end] = matrix[begin][begin + k]
            matrix[begin][begin + k] = temp
            print(f"temp=matrix[{end-k}][{begin}]")
            print(f"matrix[{end - k}][{begin}] = matrix[{end}][{end - k}]")
            print(f"matrix[{end}][{end - k}] = matrix[{begin + k}][{end}]")
            print(f"matrix[{begin + k}][{end}] = matrix[{begin}][{begin + k}]")
            print(f"matrix[{begin}][{begin + k}] = temp")
            print("---"*20)
    return matrix


if __name__ == '__main__':
    print(rotate([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [13, 14, 15, 16]]))
    # print(s.rotate([[1, 2], [3, 4]]))

result:

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

Process finished with exit code 0
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值