LeetCode54 59 螺旋矩阵 螺旋矩阵II (数组)

1.螺旋矩阵

给定一个包含 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]
思路:可以根据环的个数来遍历这个矩阵,环个数的计算为 l o o p = m i n ( c l o u m s + 1 , r o w s + 1 ) / 2 loop=min(cloums+1, rows+1)/2 loop=min(cloums+1,rows+1)/2, 然后通过遍历每个环的四条边可以得到,环的四条边如下:
边1:
[[1 , 2 , 3 , 4 ] ,
[5, 6, 7, 8],
[9,10,11,12]]
边1+边2:
[[1 , 2 , 3 , 4 ] ,
[5, 6, 7, 8 ],
[9,10,11,12 ]]
边1+边2+边3:
[[1 , 2 , 3 , 4 ] ,
[5, 6, 7, 8 ],
[9 ,10 ,11 ,12 ]]
边1+边2+边3+边4:
[[1 , 2 , 3 , 4 ] ,
[5 , 6, 7, 8 ],
[9 ,10 ,11 ,12 ]]

class Solution {
public:
    vector spiralOrder(vector>& matrix) {
        vector empty_matrix;
        if(matrix.size()==0) return empty_matrix;
        vector spiralarray;
        int colums=matrix[0].size();
        int rows=matrix.size();
        int loop=rowsi-1;c--){
                spiralarray.push_back(matrix[rows-i-1][c]);
            }
            for(int d=rows-i-2;d>i;d--){
                spiralarray.push_back(matrix[d][i]);
            }
            col=col-2;
            row=row-2;
        }
        return spiralarray;
    }
};

2.螺旋矩阵II

给定一个正整数 n,生成一个包含 1 到 n 2 n^{2} n2 所有元素,且元素按顺时针顺序螺旋排列的正方形矩阵。
示例:
输入: 3
输出:
[ [ 1, 2, 3 ],
[ 8, 9, 4 ],
[ 7, 6, 5 ]]
解题思路:思路类似于螺旋矩阵, 只不过先请求一个容器,然后赋值到每个索引即可。

class Solution {
public:
    vector> generateMatrix(int n) {
        vector> tempMatrix(n,vector(n));
        int value=1;
        int topLoop=(n+1)/2;
        int col=n;
        int row=n;
        for(int loop=0;looploop-1;--c){ 
                tempMatrix[n-loop-1][c]=value;
                ++value;
            }
            for(int d=n-loop-2;d>loop;--d){ 
                tempMatrix[d][loop]=value;
                ++value;
            }
            row=row-2;
            col=col-2;
        }
        return tempMatrix;
    }
};```

你可能感兴趣的:(LeetCode)