54.螺旋矩阵(清爽版本)C++-创新互联
给你一个 m 行 n 列的矩阵 matrix ,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素。
class Solution {public:
vectorspiralOrder(vector>& matrix) {vectorans;
//由于是二维的,dx dy分别是行和列的每次偏移量
//根据题目要求,蛇形遍历,偏移量有增有减
int dx[4] = {0,1,0,-1};
int dy[4] = {1,0,-1,0};
int row = matrix.size();
int col = matrix[0].size();
int x ,y;x=y=0;
int t = 0;
int count = 0;
while(countans.push_back(matrix[x][y]);
//访问过的记录一下
matrix[x][y] = INT_MAX;
//如果,触碰边界或以访问,调整增量
if(x+dx[t]<0||y+dy[t]<0||x+dx[t]>=row||y+dy[t]>=col||matrix[x+dx[t]][y+dy[t]]==INT_MAX)
{ //通过+1取余数实现循环
t= (t+1)%4;
}
x = x+dx[t];
y = y+dy[t];
count++;
}
return ans;
}
};
如果碰到边界就拐弯。最直观的做法是模拟遍历矩阵,按照顺时针螺旋顺序遍历矩阵中的元素。初始位置是矩阵的左上角,初始方向是向右,当移动到矩阵下标范围以外或者已经访问过的位置时需要将移动方向顺时针旋转。
为了确保每个元素只访问一次,走过的地方置大,当遍历的元素个数等于mXn时,矩阵中的所有元素遍历结束。
你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧
文章标题:54.螺旋矩阵(清爽版本)C++-创新互联
文章来源:http://scyanting.com/article/copsoh.html