Spiral Matrix (Medium)

Description

Given a matrix of m x n elements (m rows, n columns), return all elements of the matrix in spiral order.

Analysis

直接模拟。。

My Solution

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
//C++
class Solution {
vector<int> ans;
public:
vector<int> spiralOrder(vector<vector<int> > &matrix) {
int dx[] = {0,1,0,-1};
int dy[] = {1,0,-1,0};
int m = matrix.size();
if(m == 0) return ans;
int n = matrix[0].size();
if(n == 0) return ans;
int u = 0 ,d = m - 1 , l = 0, r = n - 1;
int x = 0 , y = 0 , num = m*n , dir = 0;
while(num){
if(x>=u&&y>=l&&x<=d&&y<=r){
ans.push_back(matrix[x][y]);
num--;
x+=dx[dir];
y+=dy[dir];
}
else{
x-=dx[dir];
y-=dy[dir];
if(dir == 0) u++;
else if(dir == 1) r--;
else if(dir == 2) d--;
else l++;
dir = (dir+1)%4;
x+=dx[dir];
y+=dy[dir];
}
}
return ans;
}
};