Leetcode 54. 螺旋矩阵 C++ 剑指offer 顺时针打印矩阵

两处的答案是一样的。

题目描述

给定一个包含 m x n 个元素的矩阵(m 行, n 列),请按照顺时针螺旋顺序,返回矩阵中的所有元素。

示例 1:

输入:
[
[ 1, 2, 3 ],
[ 4, 5, 6 ],
[ 7, 8, 9 ]
]
输出: [1,2,3,6,9,8,7,4,5]
示例 2:

输入:
[
[1, 2, 3, 4],
[5, 6, 7, 8],
[9,10,11,12]
]
输出: [1,2,3,4,8,12,11,10,9,5,6,7]

思路

通过矩阵四个角来控制循环。
更好的方法:
https://blog.csdn.net/Regemc/article/details/79714003

https://blog.csdn.net/Scarlett_Guan/article/details/80235092

解答

class Solution {
public:
    vector<int> printMatrix(vector<vector<int> > matrix) {
vector<int> res;
        if(matrix.size()==0)
            return res;
        int r1=0,r2=matrix.size()-1;
        int c1=0,c2=matrix[0].size()-1;
        int i=0,j=0;
        int sum=matrix.size()*matrix[0].size();
        while(res.size()<sum)
        {
            if(j==c1&&i==r1)
            {
                while(j<=c2) res.push_back(matrix[i][j++]);
                ++r1;
                --j;
                ++i;
            }
            else if(j==c2&&i==r1)
            {
                while(i<=r2) res.push_back(matrix[i++][j]);
                --c2;
                --i;
                --j;
            }
            else if(j==c2&&i==r2)
            {
                while(j>=c1) res.push_back(matrix[i][j--]);
                --r2;
                ++j;
                --i;
            }
            else  //(j==c1&&i==r1)
            {
                while(i>=r1) res.push_back(matrix[i--][j]);
                ++c1;
                ++i;
                ++j;
            }
        }
        return res;
    }
};

猜你喜欢

转载自blog.csdn.net/yuanliang861/article/details/86616865