zoukankan      html  css  js  c++  java
  • leetcode54 螺旋矩阵

    题目的思路是每次确定左上顶点和右下顶点,然后进行一个框的打印,注意边界条件。然后设计一个打单行和单列的算法。一个小错误如果vector为空的话调用.size()方法会引发空指针异常,所以先判空再进行下面的操作。

    class Solution {
    public:
        vector<int> spiralOrder(vector<vector<int>>& matrix) {
            if (matrix.empty() || matrix[0].empty()) 
                return {};
            int m = matrix.size();
            int n = matrix[0].size();
            int x1 = 0, y1 = 0, x2 = m - 1, y2 = n - 1;
            vector<int>res;
            int i = 0, j = 0;
            while (x1 <= x2 && y1 <= y2)
            {
                if (x1 == x2 || y1 == y2)//棒状结构,特殊处理
                {
                    if(x1==x2&&y1==y2)
                    {
                        res.push_back(matrix[x1][y1]);
                        return res;
                    }
                    else if(x1==x2)//一行
                    {
                        for(j=y1;j<=y2;j++)
                            res.push_back(matrix[x1][j]);
                        return res;
                    }
                    else
                    {
                        for(i=x1;i<=x2;i++)
                        {
                            res.push_back(matrix[i][y1]);
                        }
                        return res;
                    }
                }
                while (j < y2)
                {
                    res.push_back(matrix[i][j]);
                    j++;
                }
                while (i < x2)
                {
                    res.push_back(matrix[i][j]);
                    i++;
                }
                while (j > y1)
                {
                    res.push_back(matrix[i][j]);
                    j--;
                }
                while (i > x1)
                {
                    res.push_back(matrix[i][j]);
                    i--;
                }
                x1++;
                y1++;
                x2--;
                y2--;
                i++;
                j++;
            }
            return res;
        }
    };
  • 相关阅读:
    Java经典面试题及详解
    linux nc命令使用详解
    终端下更改文件显示颜色
    第二章 IoC Setter注入
    网络抓包wireshark
    一些软件软件开发原则
    开发原则之约定大于配置
    2016第31周六
    2016第31周五
    2016年第31周四
  • 原文地址:https://www.cnblogs.com/legendcong/p/12484105.html
Copyright © 2011-2022 走看看