200805
今天复习专题写的是数组的54. 旋转矩阵 Spiral Matrix
和59. 螺旋矩阵II Spiral Matrix II
。
这两个也是剑指offer上的经典题目,对于边界条件要求的非常严格,短时间内很有可能是难以考虑周全的。
5. 数组:旋转矩阵
54. 旋转矩阵 Spiral Matrix
- 难度:中等
- 慢慢遍历,加边界条件。
- 这个题本身不难,但是在短时间内处理好边界条件是不容易的。如哪里是等于,哪里是小于等于,向什么方向都要很小心。
- 1.四个
for
循环的顺序不能交换,因为就是按照这个顺序执行的。如第一个ans.add(matrix[up][i])
,就是固定了第up
列的结果。所以这里不能出错。 - 2.
for
循环里的等号是可以取到的,相等的时候仍然可行。 - 3.循环在什么时候结束呢?只要满足
break
的任何一个条件就可以了。为满足其中任何一个条件,都需要到达最里面的那个点(可能不是最中间,但是基本一定在里面)。这样的话再在up
,down
,等这里作任何加减都会导致条件被破坏。
- 1.四个
- 因为这不是一个方阵,所以最后一个点未必是在最中心的,所以最后是以什么形式到达的最后一个点我们并不清楚,四种情况满足任何一个都
break
。
class Solution {
public List<Integer> spiralOrder(int[][] matrix) {
List<Integer> ans = new ArrayList<>();
if (matrix == null || matrix.length == 0 || matrix[0] == null || matrix[0].length == 0) return ans;
int row = matrix.length;
int col = matrix[0].length;
int up = 0