P54 螺旋矩阵

一道模拟题 , 不是很难,但对于边界的判断容易失误。

Untitled.png

  • 通过上下左右四个边界进行遍历 , 防止越界。
  • 时间复杂度为O(m * n)
class Solution {
public:
    vector<int> spiralOrder(vector<vector<int>>& matrix) {
        int n = matrix.size() , m = matrix[0].size();
        int up = 0 , down = n-1 , left = 0 , right = m-1;
        vector<int> ans;
        while(true){
            // 左到右遍历, up这一行
            for(int i = left;i <= right;i++) ans.push_back(matrix[up][i]);
            up ++;
            // 判断上边界是否超过下边界
            if(up > down) break;
            // 上到下, 遍历right这一列
            for(int i = up;i <= down;i++) ans.push_back(matrix[i][right]);
            right --;
            // 判断右边界是否超过左边界
            if(right < left) break;
            // 从右到左 ,遍历down
            for(int i = right;i >= left;i--) ans.push_back(matrix[down][i]);
            down--;
            // 判断down是否超过up
            if(down < up) break;
            // 从下到上,遍历left
            for(int i = down;i >= up;i--) ans.push_back(matrix[i][left]);
            left ++;
            // 判断左是否超过右边界
            if(left > right) break;
        }
        return ans;
    }
};

下次见!

迷茫java练习生