[LeetCode 题解] Spiral Matrix
2017-12-05 00:05
337 查看
前言
【LeetCode 题解】系列传送门:http://www.cnblogs.com/double-win/category/573499.html
题目链接
54. Spiral Matrix题目描述
Given a matrix of m x n elements (m rows, n columns), return all elements of the matrix in spiral order.For example,
Given the following matrix:
[
[ 1, 2, 3 ],
[ 4, 5, 6 ],
[ 7, 8, 9 ]]
You should return
[1,2,3,6,9,8,7,4,5].
题意
按照螺旋的方式返回矩阵中的各个元素。例如,给定如下矩阵
[
[ 1, 2, 3 ],
[ 4, 5, 6 ],
[ 7, 8, 9 ]]
其对应的结果为
[1, 2, 3, 6, 9, 8, 7, 4, 5]
思路
根据题意提取关键信息:(1) m x n elements (m rows, n columns), 没有特意强调 m 和n 非负, 因此在边界判断是需要考虑空数组
(2) 螺旋的方式, 从结果可以看出是按照顺时针方向依次遍历的。
每次都是按照一个方向一直遍历, 直到该方向上所有的数据都访问过, 那么就转换到下一个方向。
从上一个方向开始, 每个点可能的方向最多有4个, 如果四个方向的下一个点都被遍历过, 则说明碰到了终点。
解法
class Solution(object): def bfs(self, matrix, i, j, last = 0): """ :type matrix: List[List[int]] :type i: int current row index :type j: int current column index :rtype: void """ if self.visited[i][j] == 0: self.visited[i][j] = 1 self.res.append(matrix[i][j]) retry = 0 while retry < 4: if last % 4 == 0: if j + 1 <= self.n - 1 and self.visited[i][j + 1] == 0: self.bfs(matrix, i, j + 1, last) elif last % 4 == 1: if i + 1 <= self.m - 1 and self.visited[i + 1][j] == 0: self.bfs(matrix, i + 1, j, last) elif last % 4 == 2: if j - 1 >= 0 and self.visited[i][j - 1] == 0: self.bfs(matrix, i, j - 1, last) elif last % 4 == 3: if i - 1 >= 0 and self.visited[i - 1][j] == 0: self.bfs(matrix, i - 1, j, last) last += 1 retry += 1 def spiralOrder(self, matrix): """ :type matrix: List[List[int]] :rtype: List[int] """ self.visited = [] self.res = [] self.m = len(matrix) if self.m == 0: # the matrix is empty return self.res self.n = len(matrix[0]) for i in range(self.m): line = [] for j in range(self.n): line.append(0) self.visited.append(line[:]) self.bfs(matrix, 0, 0) return self.res
声明
作者 | Double_Win |
出处 | http://www.cnblogs.com/double-win/p/7979672.html |
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接,否则作者保留追究法律责任的权利。 若本文对你有所帮助,您的关注和推荐是我们分享知识的动力! |
相关文章推荐
- [LeetCode]题解(python):054-Spiral Matrix
- LeetCode题解:Spiral Matrix I and II
- [LeetCode]题解(python):059-Spiral Matrix II
- LeetCode——Spiral Matrix
- Leetcode Spiral Matrix
- 【LeetCode】Spiral Matrix
- 62 leetcode - Spiral Matrix II
- [leetcode] Spiral Matrix II
- LeetCode (Spiral Matrix)
- LeetCode Spiral Matrix II
- [Leetcode] Spiral Matrix
- [LeetCode][JavaScript]Spiral Matrix II
- [LeetCode]Spiral Matrix
- 【LeetCode】Spiral Matrix II
- LeetCode: Spiral Matrix [058]
- LeetCode:Spiral Matrix
- leetcode Spiral Matrix
- [leetcode-54]Spiral Matrix(C语言)
- [LeetCode] Spiral Matrix II
- LeetCode: Spiral Matrix