title: leetcode-54-螺旋矩阵(java)
date: 2019-09-13 15:27:14
categories:
- leetcode
tags: - leetcode
螺旋矩阵
-
给定一个包含 m x n 个元素的矩阵(m 行, n 列),请按照顺时针螺旋顺序,返回矩阵中的所有元素。
示例 1:
输入:
[
[ 1, 2, 3 ],
[ 4, 5, 6 ],
[ 7, 8, 9 ]
]
输出: [1,2,3,6,9,8,7,4,5]
示例 2:输入:
[
[1, 2, 3, 4],
[5, 6, 7, 8],
[9,10,11,12]
]
输出: [1,2,3,4,8,12,11,10,9,5,6,7]来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/spiral-matrix
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。 -
抽丝剥茧法:从外到内依次剥皮,首先确定一个,就是剥皮的次数就是行数和列数的最小值/2
-
边界条件1:从左到右:
for (int j=i;j<col-i;j++){ if (matrix[i][j]!=Integer.MIN_VALUE){ list.add(matrix[i][j]); matrix[i][j] = Integer.MIN_VALUE; } }
-
边界条件2:从上到下
for (int j=i+1;j<row-i;j++){ if (matrix[j][col-i-1]!=Integer.MIN_VALUE){ list.add(matrix[j][col-i-1]); matrix[j][col-i-1] = Integer.MIN_VALUE; } }
-
边界条件3:从右到左
for (int j=col-i-2;j>=i;j--){ if (matrix[row-i-1][j]!=Integer.MIN_VALUE){ list.add(matrix[row-i-1][j]); matrix[row-i-1][j] = Integer.MIN_VALUE; } }
-
边界条件4:从下到上
for (int j=row-i-2;j>i;j--){ if (matrix[j][i]!=Integer.MIN_VALUE){ list.add(matrix[j][i]); matrix[j][i] = Integer.MIN_VALUE; } }
-
-
从上面的边界条件得到结果即可
class Solution { public List<Integer> spiralOrder(int[][] matrix) { List<Integer> list = new ArrayList<>(); int row = matrix.length; if(row==0) return list; int col = matrix[0].length; int i; for ( i = 0; i <= Math.min(row,col)/2; i++) { for (int j=i;j<col-i;j++){ if (matrix[i][j]!=Integer.MIN_VALUE){ list.add(matrix[i][j]); matrix[i][j] = Integer.MIN_VALUE; } } for (int j=i+1;j<row-i;j++){ if (matrix[j][col-i-1]!=Integer.MIN_VALUE){ list.add(matrix[j][col-i-1]); matrix[j][col-i-1] = Integer.MIN_VALUE; } } for (int j=col-i-2;j>=i;j--){ if (matrix[row-i-1][j]!=Integer.MIN_VALUE){ list.add(matrix[row-i-1][j]); matrix[row-i-1][j] = Integer.MIN_VALUE; } } for (int j=row-i-2;j>i;j--){ if (matrix[j][i]!=Integer.MIN_VALUE){ list.add(matrix[j][i]); matrix[j][i] = Integer.MIN_VALUE; } } } return list; } }