LeetCode Day43 Spiral Matrix 螺旋矩阵

矩阵为m×n,环数为min(m,n)/2,设p,q为环的高度和宽度

class Solution {
public:
    vector<int> spiralOrder(vector<vector<int>>& matrix) {
        if (matrix.empty() || matrix[0].empty()) return {};
        vector<int> res;
        int m=matrix.size(),n=matrix[0].size();
        int c=m>n?(n+1)/2:(m+1)/2;
        int p=m,q=n;
        for(int i=0;i<c;i++,p-=2,q-=2){
            for(int col=i;col<i+q;col++) res.push_back(matrix[i][col]);
            for(int row=i+1;row<i+p;row++) res.push_back(matrix[row][i+q-1]);
            if(p==1||q==1) break;
            for(int col=i+q-2;col>=i;col--) res.push_back(matrix[i+p-1][col]);
            for(int row=i+p-2;row>=i+1;row--) res.push_back(matrix[row][i]);
        }
        return res;
    }
};
class Solution {
public:
    vector<int> spiralOrder(vector<vector<int>>& matrix) {
        if (matrix.empty() || matrix[0].empty()) return {};
        int m = matrix.size(), n = matrix[0].size();
        vector<int> res;
        int up = 0, down = m - 1, left = 0, right = n - 1;
        while (true) {
            for(int j=left;j<=right;j++) res.push_back(matrix[up][j]);
            if(++up>down) break;
            for(int i=up;i<=down;i++) res.push_back(matrix[i][right]);
            if(--right<left) break;
            for(int j=right;j>=left;j--) res.push_back(matrix[down][j]);
            if(--down<up) break;
            for(int i=down;i>=up;i--) res.push_back(matrix[i][left]);
            if(++left>right) break;
        }
        return res;
    }
};

猜你喜欢

转载自blog.csdn.net/weixin_41394379/article/details/84536558