一、螺旋矩阵
class Solution {
public:
vector<int> spiralOrder(vector<vector<int> > &matrix) {
int dir[4][2] = {{0,1}, {1,0},{0,-1},{-1,0}};//右下左上
vector<int> res;
int m = matrix.size();
if(m == 0)
return res;
int n = matrix[0].size();
int x = 0,y = 0;//左上角,即为起点
int d = 0;//控制方向位
for(int i = 0;i < m * n;i ++){
res.push_back(matrix[x][y]);
matrix[x][y] = INT_MAX;//遍历完就初始化很大的值
int dx = x + dir[d][0], dy = y + dir[d][1];//下一步要到达的位置
if(dx < 0 || dx >= m || dy < 0 || dy >= n || matrix[dx][dy] == INT_MAX){
//如果下一步溢出或者已经访问,就转换方向
d = (d + 1) % 4;///转变方向
//移动到下一个点
dx = x + dir[d][0];
dy = y + dir[d][1];
}
x = dx;
y = dy;
}
return res;
}
};