zoukankan      html  css  js  c++  java
  • leetcode 54. Spiral Matrix 、59. Spiral Matrix II

    54题是把二维数组安卓螺旋的顺序进行打印,59题是把1到n平方的数字按照螺旋的顺序进行放置

    54. Spiral Matrix

    start表示的是每次一圈的开始,每次开始其实就是从(0,0)、(1,1)这种开始的。

    用endx、endy来表示每次转圈的x、y方向的终止位置,方便后面进行边界条件设置。

    注意:后面start < endx && start < endy、start < endy && start < endx-1都必须同时满足x、y的条件,不然会出现错误

    为什么后面判断条件的时候要多个判断,因为这里使用的是4个if,如果第二个if没有执行,实际上是不应该执行第三个if,但是如果不加&&多个条件判断,代码实际上会运行。

    class Solution {
    public:
        vector<int> spiralOrder(vector<vector<int>>& matrix) {
            vector<int> result;
            int row = matrix.size();
            if(row <= 0)
                return result;
            int col = matrix[0].size();
            if(col <= 0)
                return result;
            int start = 0;
            while(start*2 < row && start*2 < col){
                int endx = row - 1 - start;
                int endy = col - 1 - start;
                for(int i = start;i <= endy;i++)
                    result.push_back(matrix[start][i]);
                if(start < endx){
                    for(int i = start + 1;i <= endx;i++)
                        result.push_back(matrix[i][endy]);
                }
                if(start < endx && start < endy){
                    for(int i = endy - 1;i >= start;i--)
                        result.push_back(matrix[endx][i]);
                }
                if(start < endy && start < endx - 1){
                    for(int i = endx - 1;i >= start + 1;i--)
                        result.push_back(matrix[i][start]);
                }
                start++;
            }
            return result;
        }
    };

    59. Spiral Matrix II

    与54题差不多,只是用一个num来表示当前存储的数字,每个计算num++

    class Solution {
    public:
        vector<vector<int>> generateMatrix(int n) {
            vector<vector<int>> result(n,vector<int>(n));
            int row = n,col = n,start = 0;
            int num = 0;
            while(start*2 < row && start*2 < col){
                int endx = row - 1 - start;
                int endy = col - 1 - start;
                for(int i = start;i <= endy;i++){
                    num++;
                    result[start][i] = num;
                }
                if(start < endx){
                    for(int i = start + 1;i <= endx;i++){
                        num++;
                        result[i][endy] = num;
                    }
                }
                if(start < endx && start < endy){
                    for(int i = endy - 1;i >= start;i--){
                        num++;
                        result[endx][i] = num;
                    }
                }
                if(start < endy && start < endx - 1){
                    for(int i = endx - 1;i >= start + 1;i--){
                        num++;
                        result[i][start] = num;
                    }
                }
                start++;
            }
            return result;
        }
    };
  • 相关阅读:
    批处理学习总结之常用命令1
    Delphi常用数据类型
    Delphi预编译指令总结
    Delphi同步互斥总结
    MyEclipse 环境配置总结
    倒排索引
    laravel 学习相关笔记
    elasticsearch倒排索引原理
    原生sql和 TP sql怎么关联?
    elastic
  • 原文地址:https://www.cnblogs.com/ymjyqsx/p/10791711.html
Copyright © 2011-2022 走看看