版权声明:未经允许禁止转载 https://blog.csdn.net/weixin_38481963/article/details/87973728
给定一个包含 m x n 个元素的矩阵(m 行, n 列),请按照顺时针螺旋顺序,返回矩阵中的所有元素。
示例 1:
输入:
[
[ 1, 2, 3 ],
[ 4, 5, 6 ],
[ 7, 8, 9 ]
]
输出: [1,2,3,6,9,8,7,4,5]
在这道题上花费了不少时间,关于退出的临界条件,把握的不是很好。
public List<Integer> spiralOrder(int[][] matrix) {
if(matrix==null) return null;
int a = -1, b = -1, c = -1, d = 0;
int i = 0, j = -1;
List<Integer> ans = new LinkedList<>();
if(matrix.length==0 || matrix[0].length==0) return ans;
int n = matrix.length;
int m = matrix[0].length;
int k = m*n;
while(k>0){
a++;b++;c++;d++;
for( ++j; j<m-a; j++)
{
ans.add(matrix[i][j]);k--;
}
if(k==0) break;
for(++i,--j ; i<n-b; i++)
{
ans.add(matrix[i][j]);k--;
}
if(k==0) break;
for( --j,--i; j>=c; j--)
{
ans.add(matrix[i][j]);k--;
}
if(k==0) break;
for( i--,++j; i>=d; i--)
{
ans.add(matrix[i][j]);k--;
}
++i;
}
return ans;
}