剑指 Offer 29. 顺时针打印矩阵

剑指 Offer 29. 顺时针打印矩阵

题目

顺时针打印数组-2020-10-27-21-09-53

题解

以前随手写过一次,当时写的时候,没有测试很多用例其实有问题传送门
解题思路
定义上下左右四个边界,按顺时针扫描边界的行和列,扫描完一行或者一列之后更新边界值并判断边界。
本来使用while(left < right || left < down) 为循环判断条件。其实这样不可以,可能会重复添加,如果换成 && 号,则可能会少添加。
故只好边添加,边判断。只要不符合,只要不符合条件就跳出循环。
show your code

class Solution {
public:
    vector<int> spiralOrder(vector<vector<int>>& matrix) {
        int n1 = matrix.size();     // 行
        if (!n1) return {};
        int n2 = matrix[0].size();  // 列

        int up = 0, down = n1 - 1, left = 0, right = n2 - 1;
        vector<int> ans;
        while (true){
            // 先上 面的 行。
            for (int i = left; i <= right; i ++ ) ans.push_back(matrix[up][i]);
            if ( ++ up > down) break;
            for (int i = up; i <= down; i ++ ) ans.push_back(matrix[i][right]);
            if ( -- right < left) break;
            for (int i = right; i >= left; i -- ) ans.push_back(matrix[down][i]);
            if (-- down < up) break;
            for (int i = down; i >= up; i -- ) ans.push_back(matrix[i][left]);
            if ( ++ left > right) break;
        }

        return ans;
    }
};

喜欢的话,给博主赏一杯冰阔乐吧


 上一篇
leetcode 99. 恢复二叉搜索树 leetcode 99. 恢复二叉搜索树
leetcode 99. 恢复二叉搜索树原题传送门 思路 既然是二叉搜索树,那肯定中序遍历了。当然还有Morris遍历算法(我还没学~)中序遍历的话,对于二叉搜素树来说就是从小到大进行排序。那么在遍历的过程中我们可以记录出现逆序的情况。
2020-10-30
下一篇 
java中final修饰符 java中final修饰符
基础首先回顾一下关于 final实例变量的知识。 final可以修饰变量,被 final修饰的变量被赋初始值之后,不能对它重新赋值。 final可以修饰方法,被 final修饰的方法不能被重写。 final可以修饰类,被 final修饰的
2020-10-22
  目录