• 54. Spiral Matrix


    Given an m x n matrix, return all elements of the matrix in spiral order.

    Example 1:

    Input: matrix = [[1,2,3],[4,5,6],[7,8,9]]
    Output: [1,2,3,6,9,8,7,4,5]

    Constraints:

    • m == matrix.length
    • n == matrix[i].length
    • 1 <= m, n <= 10
    • -100 <= matrix[i][j] <= 100

    思路:把矩阵看成若干个顺时针方向的圈组成。一圈一圈进行分析,找出每一圈打印结束的终止条件,再分析打印一圈的功能。

    思路和代码来自《剑指Offer》一书

    class Solution {
    public:
        vector<int> spiralOrder(vector<vector<int>>& matrix) {
            vector<int> res;
            int rows=matrix.size();
            int cols=matrix[0].size();
            int start=0;//矩阵中选左上角(start,start)作为一圈分析的目标
            while(cols>start*2&&rows>start*2){
                int endX=cols-1-start;//终止列号
                int endY=rows-1-start;//终止行号
                //第一步,从左向右打印一行
                for(int i=start;i<=endX;i++)
                    res.push_back(matrix[start][i]);
                //第二步,从上到下打印一行,进行第二步打印条件是终止行号大于起始行号
                if(start<endY){
                    for(int i=start+1;i<=endY;i++)
                        res.push_back(matrix[i][endX]);
                }
                //第三步,从左向右打印,进行第三步的打印条件是圈内至少有两行两列,即终止行号大于起始行号且终止列号大于起始列号
                if(start<endX&&start<endY){
                    for(int i=endX-1;i>=start;i--)
                        res.push_back(matrix[endY][i]);
                }
                if(start<endX&&start<endY-1){
                    for(int i=endY-1;i>start;i--)
                        res.push_back(matrix[i][start]);
                }
                start++;//一圈打印结束,往里面开始另一圈
            }
            return res;
        }
    };
    Runtime: 0 ms, faster than 100.00% of C++ online submissions for Spiral Matrix.
    Memory Usage: 6.7 MB, less than 98.93% of C++ online submissions for Spiral Matrix.
  • 相关阅读:
    数据库范式
    SQL--使用NewID函数,创建GUID列
    初学Python
    Artificial intelligence(AI)
    Concurrency in csharp (Asynchronous, Parallel, and Multithreaded Programming)
    MySQL 5.7 create VIEW or FUNCTION or PROCEDURE
    csharp: Oracle Stored Procedure DAL using ODP.NET
    csharp: ODP.NET,System.Data.OracleClient(.net 4.0) and System.Data.OleDb读取Oracle g 11.2.0的区别
    csharp:ASP.NET SignalR
    csharp: MySQL Stored Procedure using DAL
  • 原文地址:https://www.cnblogs.com/Makerr/p/14684094.html
Copyright © 2020-2023  润新知