题目
给定一个包含 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]
算法实现
public static IList<int> SpiralOrder(int[][] matrix)
{
IList<int> list = new List<int>();
if (matrix.Length == 0)
return list;
int line = 0, row = 0, s = 0;
int lineAmount = matrix[row].Length, rowAmount = matrix.Length;
while (list.Count < lineAmount * rowAmount)
{
for (; line < lineAmount - s; line++)
{
list.Add(matrix[row][line]);
}
if (list.Count == lineAmount * rowAmount)
break;
for (row++,line--; row < rowAmount - s; row++)
{
list.Add(matrix[row][line]);
}
if (list.Count == lineAmount * rowAmount)
break;
for (line--,row--; line > -1 + s; line--)
{
list.Add(matrix[row][line]);
}
if (list.Count == lineAmount * rowAmount)
break;
for (row--,line++; row > 0 + s; row--)
{
list.Add(matrix[row][line]);
}
line++;
row++;
s++;
}
return list;
}
执行结果
执行结果 : 通过
执行用时 : 352 ms, 在所有 C# 提交中击败了85.51%的用户
内存消耗 : 28.7 MB, 在所有 C# 提交中击败了5.26%的用户
小的总结
按照自己的想法设计了算法,之后看解答是按层模拟的方法。