54. 螺旋矩阵
-
解题思路:宏观思路,一圈一圈打,确定好「一圈」的左上角以及右下角,然后再打印。有两种特殊情况,左上角和右上角的列相等时,只需要打一行即可;左上角的列和右下角的列相等时,只需打印一列即可。
-
代码:
from typing import List class Solution: def spiralOrder(self, matrix: List[List[int]]) -> List[int]: n = len(matrix) m = len(matrix[0]) ans = [] begin_r = 0 begin_c = 0 end_r = n - 1 end_c = m - 1 while begin_r <= end_r and begin_c <= end_c: # 一圈一圈打印 if begin_r == end_r: # 只需要打印一行 tmp = begin_c while tmp <= end_c: ans.append(matrix[begin_r][tmp]) tmp += 1 break if begin_c == end_c: # 只需打印一列 tmp = begin_r while tmp <= end_r: ans.append(matrix[tmp][end_c]) tmp += 1 break # 上 tmp = begin_c while tmp <= end_c: ans.append(matrix[begin_r][tmp]) tmp += 1 # 右 tmp = begin_r + 1 while tmp <= end_r: ans.append(matrix[tmp][end_c]) tmp += 1 # 下 tmp = end_c - 1 while tmp >= begin_c: ans.append(matrix[end_r][tmp]) tmp -= 1 # 左 tmp = end_r - 1 while tmp > begin_r: ans.append(matrix[tmp][begin_c]) tmp -= 1 # 打印完一圈后,更新左上角点 和右下角点 begin_r += 1 begin_c += 1 end_r -= 1 end_c -=1 return ans
标签:
leetcode刷题
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理