using System;
using System.Collections.Generic;
class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param matrix int整型二维数组
* @return int整型一维数组
*/
public List<int> spiralOrder (List<List<int>> matrix) {
// write code here
List<int> result = new List<int>();
if(matrix == null || matrix.Count == 0 || matrix[0].Count == 0)
return result;
int top = 0;
int bottom = matrix.Count - 1;
int left = 0;
int right = matrix[0].Count - 1;
while(left <= right && top <= bottom)
{
for(int i = left; i <= right; i++)
{
result.Add(matrix[top][i]);
}
top++;
for(int i = top; i <= bottom; i++)
{
result.Add((matrix[i][right]));
}
right--;
if(top < bottom)
{
for(int i = right;i >= left; i--)
{
result.Add(matrix[bottom][i]);
}
bottom--;
}
if(left < right)
{
for(int i = bottom; i >= top; i--)
{
result.Add(matrix[i][left]);
}
left++;
}
}
return result;
}
}
在这个实现中,我们使用四个变量来跟踪遍历的上下左右边界。首先,我们向右遍历上边界,然后向下遍历右边界,接着向左遍历下边界,最后向上遍历左边界。在每个方向上的遍历过程中,我们始终保持边界值的正确性。当上边界大于下边界或左边界大于右边界时,表示已经遍历完整个矩阵。
这个实现的时间复杂度和空间复杂度都是 O(m * n),其中 m 是矩阵的行数,n 是矩阵的列数。时间复杂度是因为需要遍历整个矩阵,而空间复杂度是因为需要存储返回的结果。
错误点