• leetcode第一刷_Spiral Matrix


    我认为这个题好无聊啊,好端端一个数组。干嘛要跟比巴卜一样转一圈输出呢。

    思想非常easy,每次从左到右。再从上到下,在从右到左,再从下到上。问题是每次到什么时候该改变方向。我的做法是用一个变量保存当前在第几层。这个层是相对于从外向内有几圈来说的。注意想清楚边界的话这个题一点也不难。有个细节,我的循环退出条件是訪问的数跟矩阵总个数之间的关系,假设有一次在推断进入循环是条件是满足的。可是在循环内部不满足了,我的策略是忽略这样的情况。尽管这样会在结果集中多加一些反复的数据,可是以我的算法。一定是先訪问没有訪问过的数据。再訪问反复数据的,因此能够回退回去。避免了考虑每次在循环里都考虑有没有到达越界的情况。

    class Solution {
    public:
        vector<int> spiralOrder(vector<vector<int> > &matrix) {
            int msize = matrix.size();
            vector<int> res;
            if(msize == 0)  return res;
            if(msize == 1)  return matrix[0];
            int cur = 0, row = msize, column = matrix[0].size(), i=0, j=0, level = 0;
            while(cur<row*column){
                while(j<column-level) {res.push_back(matrix[i][j++]); ++cur;}
                --j;++i;
                while(i<row-level)  {res.push_back(matrix[i++][j]); ++cur;}
                --j;--i;
                while(j>=level) {res.push_back(matrix[i][j--]); ++cur;}
                ++j;--i;
                while(i>level)  {res.push_back(matrix[i--][j]); ++cur;}
                ++j;++i;
                ++level;
            }
            while(cur>row*column){
                res.pop_back();
                cur--;
            }
            return res;
        }
    };


  • 相关阅读:
    Primeface datatable celleditor rowedit 例子
    JAVA Assert
    POI 日期类型的显示,日期类型存储为Double,数字类型雷同,为了显示为日期格式。。。
    hibernate3支持中文查询
    VC2010 编写DLL并调用;
    android 数据库例子
    VC2010 OPENCV 配置攻略;生成opencv向导
    VC2012 MFC 项目 mfc100.lib 位置
    QQ自动远程连接 JNA
    EXCEL 中 get.cell 函数的参数
  • 原文地址:https://www.cnblogs.com/lytwajue/p/6928454.html
Copyright © 2020-2023  润新知