二维数组(矩阵)层旋转是指将一个二维数组按照层级进行旋转操作,即将数组中的每一层元素按照顺时针或逆时针方向旋转。下面是一个优化后的矩阵层旋转代码示例:
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),因为只使用了常数级别的额外空间。
腾讯云相关产品和产品介绍链接地址:
请注意,以上产品仅作为示例,实际选择产品时需根据具体需求进行评估和选择。
领取专属 10元无门槛券
手把手带您无忧上云