leetcode54 螺旋矩阵

题目的思路是每次确定左上顶点和右下顶点,然后进行一个框的打印,注意边界条件。然后设计一个打单行和单列的算法。一个小错误如果vector为空的话调用.size()方法会引发空指针异常,所以先判空再进行下面的操作。

class Solution {
public:
    vector<int> spiralOrder(vector<vector<int>>& matrix) {
        if (matrix.empty() || matrix[0].empty()) 
            return {};
        int m = matrix.size();
        int n = matrix[0].size();
        int x1 = 0, y1 = 0, x2 = m - 1, y2 = n - 1;
        vector<int>res;
        int i = 0, j = 0;
        while (x1 <= x2 && y1 <= y2)
        {
            if (x1 == x2 || y1 == y2)//棒状结构,特殊处理
            {
                if(x1==x2&&y1==y2)
                {
                    res.push_back(matrix[x1][y1]);
                    return res;
                }
                else if(x1==x2)//一行
                {
                    for(j=y1;j<=y2;j++)
                        res.push_back(matrix[x1][j]);
                    return res;
                }
                else
                {
                    for(i=x1;i<=x2;i++)
                    {
                        res.push_back(matrix[i][y1]);
                    }
                    return res;
                }
            }
            while (j < y2)
            {
                res.push_back(matrix[i][j]);
                j++;
            }
            while (i < x2)
            {
                res.push_back(matrix[i][j]);
                i++;
            }
            while (j > y1)
            {
                res.push_back(matrix[i][j]);
                j--;
            }
            while (i > x1)
            {
                res.push_back(matrix[i][j]);
                i--;
            }
            x1++;
            y1++;
            x2--;
            y2--;
            i++;
            j++;
        }
        return res;
    }
};
原文地址:https://www.cnblogs.com/legendcong/p/12484105.html