首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

二维数组(矩阵)层旋转代码。尝试优化代码以进行矩阵层旋转

二维数组(矩阵)层旋转是指将一个二维数组按照层级进行旋转操作,即将数组中的每一层元素按照顺时针或逆时针方向旋转。下面是一个优化后的矩阵层旋转代码示例:

代码语言:txt
复制
def rotate_matrix(matrix):
    if not matrix or not matrix[0]:
        return matrix

    rows, cols = len(matrix), len(matrix[0])
    start_row, start_col = 0, 0
    end_row, end_col = rows - 1, cols - 1

    while start_row < end_row and start_col < end_col:
        prev = matrix[start_row + 1][start_col]

        # 上边
        for i in range(start_col, end_col + 1):
            curr = matrix[start_row][i]
            matrix[start_row][i] = prev
            prev = curr

        start_row += 1

        # 右边
        for i in range(start_row, end_row + 1):
            curr = matrix[i][end_col]
            matrix[i][end_col] = prev
            prev = curr

        end_col -= 1

        # 下边
        for i in range(end_col, start_col - 1, -1):
            curr = matrix[end_row][i]
            matrix[end_row][i] = prev
            prev = curr

        end_row -= 1

        # 左边
        for i in range(end_row, start_row - 1, -1):
            curr = matrix[i][start_col]
            matrix[i][start_col] = prev
            prev = curr

        start_col += 1

    return matrix

这段代码使用了一个循环来逐层旋转矩阵。通过定义四个边界变量(start_row、end_row、start_col、end_col),每次循环都按照顺时针方向旋转矩阵的一层。在每个方向上,使用一个临时变量prev来保存当前位置的元素,并将当前位置的元素更新为前一个位置的元素。最后返回旋转后的矩阵。

这段代码的时间复杂度为O(m*n),其中m和n分别为矩阵的行数和列数。空间复杂度为O(1),因为只使用了常数级别的额外空间。

腾讯云相关产品和产品介绍链接地址:

请注意,以上产品仅作为示例,实际选择产品时需根据具体需求进行评估和选择。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • 剑指offer-Go版实现 第二章:面试需要的基础知识

    leetcode题目实在太多了,找了半天还是回到这本10年前的书,题目数量不多,但是都比较经典,覆盖知识点比较广。开始参加leetcode周赛,做两题都是很难的,尤其是面对一堆大牛动不动四道题全做出来,很受刺激,真的是自惭形秽。狠下心来,只能自己慢慢研究一波,现在稳定两道题,偶尔还能突破三道题,这时候再重新回顾一遍剑指offer第二版,发现,以前死记硬背应对面试的东西,现在可以自己实现出来了。很多同学也说自己算法很差,有的甚至连数组和链表都分不清楚的,所以就试着分享,用GO语言重新实现一遍,也把涉及到的相关知识点一并讲解。

    02
    领券