LeetCode Medium 48 矩阵旋转 Python

75 篇文章 0 订阅
72 篇文章 0 订阅

def rotate(matrix):
    """
    算法:旋转
    思路:
        按照题目的描述进行处理,
        注意到第i,j个位置的元素会转移到第j,n-i-1的位置去,暂且叫他为x,y,这个x也还会按照上述转移准则进行下一个位置的转移
        也就是说第ij个位置进行变换的时候,会顺时针的变换4个位置,并且这4个位置的坐标转换方式都是一样的,那么就可以腾笼换鸟,
        这个挪出去,下个补进来,如此一来就可以用O1的空间存储变换位置的值
            要注意i,j的下标,如果就粗暴地 in range(n) in range(n),那么挪腾了半天,乾坤大挪移后?,各元素位置将保持不变
            注意,挪一个,就会动4个,一共是n2个元素,所以一共会挪n2/4次,两层for,差不多联想到各自n/2吧,(其实这样靠猜的
            想法挺不对的),首先可以很容易判断出来i是0到n//2,看j,首先j肯定不能到n-1-i,这样的话会替换i,0的旋转结果,也
            比较容易发现,然后就是j的其实位置,其实不难发现j的其实位置是i,对着草纸画一下就差不多清楚了,j是(i,n-i-1)
    复杂度分析:
        时间:ON2
        空间:O1
    """
    if matrix == [] or matrix[0] == []:
        return
    n = len(matrix)

    def get_rotate_xy(i, j):
        return (j, n - i - 1)

    for i in range(n // 2):
        for j in range(i, n - 1 - i):
            x, y = get_rotate_xy(i, j)
            tmp = matrix[x][y]
            matrix[x][y] = matrix[i][j]
            while (x, y) != (i, j):
                x, y = get_rotate_xy(x, y)
                old = matrix[x][y]
                matrix[x][y] = tmp
                tmp = old

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值