Spiral Matrix
问题描述:
Given a matrix of m x n elements (m rows, n columns), return all elements of the matrix in spiral order.
For example,
Given the following matrix:
[
[ 1, 2, 3 ],
[ 4, 5, 6 ],
[ 7, 8, 9 ]
]
知识补充:
zip函数
a = [1,2,3]
b = [4,5,6]
ab = zip(a,b)
>>>[(1,4),(2,5),(3,6)]//生成这样的元组
zip(*ab)
>>>[[1,2,3],[4,5,6]]//相当于变回原样
数组逆序
a = [[1,2,3],[4,5,6]]
a[::-1]
>>>[[4,5,6],[1,2,3]//相当于把数组按逆序重组
测试代码(c++):
class Solution {
public:
vector<int> spiralOrder(vector<vector<int>>& matrix) {
if (matrix.empty()) return {};
vector<int> result;
int right=matrix[0].size()-1,left=0,up=0,down=matrix.size()-1;
while(true)
{
for(int i=left;i<=right;i++)
{
result.push_back(matrix[up][i]);
}
if(up==down)
break;
up++;
for(int i=up;i<=down;i++)
{
result.push_back(matrix[i][right]);
}
if(right==left)
break;
right--;
for(int i=right;i>=left;i--)
{
result.push_back(matrix[down][i]);
}
if(up==down)
break;
down--;
for(int i=down;i>=up;i--)
{
result.push_back(matrix[i][left]);
}
if(right==left)
break;
left++;
}
return result;
}
};
性能:
参考答案(python):
return matrix and list(matrix.pop(0)) + self.spiralOrder(zip(*matrix)[::-1])