zoukankan      html  css  js  c++  java
  • LeetCode54 Spiral Matrix

    题目:

    Given a matrix of m x n elements (m rows, n columns), return all elements of the matrix in spiral order.

    For example,
    Given the following matrix:

    [
     [ 1, 2, 3 ],
     [ 4, 5, 6 ],
     [ 7, 8, 9 ]
    ]
    

    You should return [1,2,3,6,9,8,7,4,5]. (Medium)

    分析:

    题目没有什么复杂的算法要应用,就是一行一列输出,处理好细节即可。

    比较清晰的写法是搞一个rowBegin, rowEnd, colBegin, colEnd, 并在处理完一行/一列后更新值,并判断是否仍然满足 rowBegin <= rowEnd && colBegin <= colEnd

    代码:

     1 class Solution {
     2 public:
     3     vector<int> spiralOrder(vector<vector<int>>& matrix) {
     4         vector<int> result;
     5         if (matrix.size() == 0) {
     6             return result;    
     7         }
     8         int m = matrix.size(), n = matrix[0].size();
     9         int rowBegin = 0, rowEnd = m - 1, colBegin = 0, colEnd = n - 1;
    10         while (rowBegin <= rowEnd && colBegin <= colEnd) {
    11             for (int i = colBegin; i <= colEnd; ++i ) {
    12                 result.push_back(matrix[rowBegin][i]);
    13             }
    14             rowBegin++;
    15             if (rowBegin > rowEnd) {
    16                 break;
    17             }
    18             for (int i = rowBegin; i <= rowEnd; ++i) {
    19                 result.push_back(matrix[i][colEnd]);
    20             }
    21             colEnd--;
    22             if (colBegin > colEnd) {
    23                 break;
    24             }
    25             for (int i = colEnd; i >= colBegin; --i) {
    26                 result.push_back(matrix[rowEnd][i]);
    27             }
    28             rowEnd--;
    29             if (rowBegin > rowEnd) {
    30                 break;
    31             }
    32             for (int i = rowEnd; i>= rowBegin; --i) {
    33                 result.push_back(matrix[i][colBegin]);
    34             }
    35             colBegin++;
    36         }
    37         return result;
    38     }
    39 };
  • 相关阅读:
    ATM
    Python不同目录间模块调用
    Python跨目录调程序
    Python软件目录结构规范
    进程的创建-multiprocessing
    进程
    多任务版udp聊天器
    死锁
    互斥锁
    同步
  • 原文地址:https://www.cnblogs.com/wangxiaobao/p/5886915.html
Copyright © 2011-2022 走看看