给你一个 m
行 n
列的矩阵 matrix
,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素
这个题目不适合使用哈希表,需要对数据结构有一定清晰的分析
输入为一个矩阵vector<vector<int>> martix
第一步 定义变量,向量vector<int> result
第二步 判断是否为一个空的矩阵,若是,返回result(提高效率)
第三步 定义变量,4个整数指针,分别指向顶top,底bottom,左边left,右边right
第四步 当左边小于等于右边,上边小于下边,不满足跳到第九步
第五步 top从左到右插入数组,top++
第六步 right从上到下插入数组,right--
第七步 先判断左边是否还小于等于右边(right改变了)再从bottom从右到左
第八步先判断上边是否还小于等于下边(top改变了)再从left从下到上
第九步,循环结束,return result
流程图如下
class Solution {
public:
vector<int> spiralOrder(vector<vector<int>>& matrix) {
vector<int> result;
if (matrix.empty()) return result;
int top = 0 , bottom = matrix.size()-1;
int left = 0 ,right = matrix[0].size()-1;
while(top <= bottom && left <= right ){
for(int i = left ; i <= right ; ++i ){
result.push_back(matrix[top][i]);
}
top++;
for(int i = top ; i <= bottom ; ++i){
result.push_back(matrix[i][right]);
}
right--;
if(top <= bottom){
for(int i = right ; i >= left ; --i){
result.push_back(matrix[bottom][i]);
}
bottom--;
}
if(left <= right){
for(int i = bottom ; i >= top ; --i){
result.push_back(matrix[i][left]);
}
left++;
}
}
return result;
}
};