螺旋矩阵

image.png

image.png

要点:

  1. 4层循环:
    i. 第一次从左->右
    ii. 第二次从上->下
    iii. 第三次从右->左
    xi. 第四次从下到上
vector<int> spiralOrder(vector<vector<int>>& matrix)
{
    vector<vector<int>> mat;
 
    // 基本情况
    if (arr.size() == 0) {
        return mat;
    }
 
    // 构造一个 `M × N` 矩阵
    mat.resize(N, vector<int>(M));
 
    int top = 0, bottom = M - 1;
    int left = 0, right = N - 1;
 
    int index = 0;
 
    while (1)
    {
        if (left > right) {
            break;
        }
        // 打印第一行
        for (int i = left; i <= right; i++) {
            mat[top][i] = arr[index++];
        }
        top++;
 
        if (top > bottom) {
            break;
        }
        // 打印右列
        for (int i = top; i <= bottom; i++) {
            mat[i][right] = arr[index++];
        }
        right--;
 
        if (left > right) {
            break;
        }
        //打印底行
        for (int i = right; i >= left; i--) {
            mat[bottom][i] = arr[index++];
        }
        bottom--;
 
        if (top > bottom) {
            break;
        }
        //打印左列
        for (int i = bottom; i >= top; i--) {
            mat[i][left] = arr[index++];
        }
        left++;
    }
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容