题解 | #牧场边界巡游#
牧场边界巡游
https://www.nowcoder.com/practice/bc7fe78f7bcc49a8bc0afdd7a55ca810
- 题目考察的知识点 : 对矩阵的遍历方式,通常使用的是遍历过的地方就标记一下,但这道题比较巧的地方在于遍历的时候一直是在边界附近
- 题目解答方法的文字分析:本题可以对矩阵逆时针旋转模拟,当确定了每一圈螺旋的上下左右边界后,可以按照“上边界 -> 右边界 -> 下边界 -> 左边界”的方式依次进行。当走完一圈后,上下左右边界同时内缩,即上边界左边界累加,下边界右边界累减,直到最终top > bottom或者left > right不构成圈了。
- 本题解析所用的编程语言:Python
- 完整且正确的编程代码
# # 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 # # # @param matrix int整型二维数组 # @return int整型一维数组 # class Solution: def spiralTravelCounterClockwise(self , matrix: List[List[int]]) -> List[int]: # write code here # 边界模拟法 top = 0 # 上边界,初始为首行 left = 0 # 左边界,初始为首列 bottom = len(matrix) - 1 # 下边界,初始为最后一行 right = len(matrix[0]) - 1 # 上边界,初始为首行 res = [] # 只有当上边界小于等于下边界且左边界小于等于右边界时,才构成一个边界圈 while left <= right and top <= bottom: # 从上到下,加入上边界的所有元素 for r in range(top, bottom + 1): res.append(matrix[r][left]) # 从左到右,加入上边界的所有元素 for c in range(left + 1, right + 1): res.append(matrix[bottom][c]) # 如果此时上下边界重合(单行)或左右边界重合(单列),无需再遍历,否则重复。 if top == bottom or left == right: break # 从下到上,加入左边界除了与上下边界交界的元素 for r in range(bottom - 1, top - 1, -1): res.append(matrix[r][right]) # 从右到左,加入下边界除了与右边界交界的元素 for c in range(right - 1, left, -1): res.append(matrix[top][c]) top += 1 # 上边界下移 left += 1 # 左边界右移 bottom -= 1 # 下边界上移 right -= 1 # 右边界左移 return res
牛客高频top202题解系列 文章被收录于专栏
记录刷牛客高频202题的解法思路