当前位置: 首页 > news >正文

[LeetCode]-Spiral Matrix III 螺旋矩阵

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].

     如果从上下左右四个方向依次访问直到遇到“已经访问过或边界”节点,顺序切换访问方向即可。本题测试用例中会有matrix[0][n] 这种用例,会一直出现runtime error并且不提示信息,所以一定要判定matrix是否为空。

   

class Solution {
public:
    vector<int> spiralOrder(vector<vector<int> > &matrix) {
        const int m=matrix.size();
        if(m==0)return vector<int>();
        const int n=matrix[0].size();
        if(n==0)return vector<int>();

        vector<int> ret;
        vector<vector<int> > visited(m,vector<int>(n,0));

        int i=0,j=0;
        int flag=1;
        while(flag){
            flag=0;
            for(j;j<n && j>=0 && visited[i][j]!=1;j++){    //  向右访问
                ret.push_back(matrix[i][j]);
                visited[i][j]=1;
                flag=1;
            }
            j--;i++;
            for(i;i<m &&i>=0 && visited[i][j]!=1;i++){   // 向下访问
                ret.push_back(matrix[i][j]);
                visited[i][j]=1;
                flag=1;
            } 
            i--;j--;
            for(j;j<n &&j>=0 && visited[i][j]!=1;j--){   // 向左访问
                ret.push_back(matrix[i][j]);
                visited[i][j]=1;
                flag=1;
            }
            j++;i--;
            for(i;i<m &&i>=0 && visited[i][j]!=1;i--){   // 向上访问
                ret.push_back(matrix[i][j]);
                visited[i][j]=1;
                flag=1;
            }
            i++;j++;
        }
        return ret;
    }
    
};

Spiral Matrix II

Given an integer n, generate a square matrix filled with elements from 1 to n2 in spiral order.

For example,
Given n = 3,

You should return the following matrix:
[
 [ 1, 2, 3 ],
 [ 8, 9, 4 ],
 [ 7, 6, 5 ]
]
    此题相比I,更简单,思路一样。

class Solution {
public:
    vector<vector<int> > generateMatrix(int n) {
       vector<vector<int> > ret(n,vector<int>(n,0));
        if(n==0) return vector<vector<int> >();

       int i=0,j=0;
       int count=1,flag=1;
       while(flag){
           flag=0;
           for(j;j<n && j>=0 && ret[i][j]==0;j++){
                ret[i][j]=count++;
                flag=1;
           }
           j--;i++;
           for(i;i<n && i>=0 && ret[i][j]==0;i++){
                ret[i][j]=count++;
                flag=1;
           }
           i--;j--;
           for(j;j<n && j>=0 && ret[i][j]==0;j--){
                ret[i][j]=count++;
                flag=1;
           }
           j++;i--;
           for(i;i<n && i>=0 && ret[i][j]==0;i--){
                ret[i][j]=count++;
                flag=1;
           }
           i++;j++;
        }
       return ret;
    }
};


相关文章:

  • 蓝牙3.0+HS规范正式公布 携手802.11大提速
  • [LeeCode]-Divide Two Integers 不用乘除的除法运算
  • 浏览器之父卷土重来 开发新浏览RockMelt
  • Singleton Pattern 单例模式
  • 浏览器也能当操作系统!——3款中文浏览器操作系统体验评测
  • Linux进程管理中的hash
  • 浏览器真的能“永不假死”?——六款主流浏览器防假死功能测试
  • [九度—剑指offer]—二维数组查找
  • 人人都能当“苍天哥” 手把手教你制作游戏视频
  • Linux 2.6 中导出sys_call_table表修改系统调用函数
  • [九度 1510 剑指offer]—替换空格 数组插入逆向移动
  • 个人设置随身携带口袋操作系统手到擒来
  • 免费邮箱,谁更可靠?6款常用免费邮箱收信效果对比测试
  • 哪个搜索引擎更聪明?微软必应搜索挑战赛
  • [九度1512 剑指offer7] 用两个栈实现队列
  • Effective Java 笔记(一)
  • es6
  • HTTP--网络协议分层,http历史(二)
  • iOS帅气加载动画、通知视图、红包助手、引导页、导航栏、朋友圈、小游戏等效果源码...
  • Java 23种设计模式 之单例模式 7种实现方式
  • JavaScript异步流程控制的前世今生
  • Mybatis初体验
  • npx命令介绍
  • PAT A1120
  • PHP的Ev教程三(Periodic watcher)
  • Python socket服务器端、客户端传送信息
  • Python3爬取英雄联盟英雄皮肤大图
  • TCP拥塞控制
  • WePY 在小程序性能调优上做出的探究
  • 初探 Vue 生命周期和钩子函数
  • 大快搜索数据爬虫技术实例安装教学篇
  • 订阅Forge Viewer所有的事件
  • 关于Flux,Vuex,Redux的思考
  • 基于Volley网络库实现加载多种网络图片(包括GIF动态图片、圆形图片、普通图片)...
  • 猫头鹰的深夜翻译:Java 2D Graphics, 简单的仿射变换
  • 三栏布局总结
  • 小程序开发中的那些坑
  • 《TCP IP 详解卷1:协议》阅读笔记 - 第六章
  • LevelDB 入门 —— 全面了解 LevelDB 的功能特性
  • 支付宝花15年解决的这个问题,顶得上做出十个支付宝 ...
  • #HarmonyOS:基础语法
  • $con= MySQL有关填空题_2015年计算机二级考试《MySQL》提高练习题(10)
  • $emit传递多个参数_PPC和MIPS指令集下二进制代码中函数参数个数的识别方法
  • (10)ATF MMU转换表
  • (14)目标检测_SSD训练代码基于pytorch搭建代码
  • (day 2)JavaScript学习笔记(基础之变量、常量和注释)
  • (rabbitmq的高级特性)消息可靠性
  • (附源码)spring boot北京冬奥会志愿者报名系统 毕业设计 150947
  • (附源码)springboot建达集团公司平台 毕业设计 141538
  • (附源码)springboot学生选课系统 毕业设计 612555
  • (篇九)MySQL常用内置函数
  • (转载)CentOS查看系统信息|CentOS查看命令
  • (状压dp)uva 10817 Headmaster's Headache
  • ./indexer: error while loading shared libraries: libmysqlclient.so.18: cannot open shared object fil
  • .FileZilla的使用和主动模式被动模式介绍