原来很怕的一种题型,但是面试的时候又经常碰到,今天算是硬啃下来了

典型题目

54. 螺旋矩阵

59. 螺旋矩阵 II

885. 螺旋矩阵 III

————————————

54. 螺旋矩阵

按照遍历方式层层剥开,该类型题方法比较固定,建议理解记忆

class Solution {
public:vector<int> spiralOrder(vector<vector<int>>& matrix) {vector<int> ret;int m = matrix.size();if (m == 0) return ret;int n = matrix[0].size();int size = m*n, i = 0, left = 0, top = 0, right = n-1, bottom = m-1;int row, col;ret.resize(size);while (i < size) {for (row = top, col = left; col <= right && i < size; col++, i++) {ret[i] = matrix[row][col];}top++;for (row = top, col = right; row <= bottom && i < size; row++, i++) {ret[i] = matrix[row][col];}right--;for (row = bottom, col = right; col >= left && i < size ;col--, i++) {ret[i] = matrix[row][col];}bottom--;for (row = bottom, col = left; row >= top && i < size;row--, i++) {ret[i] = matrix[row][col];}left++;}return ret;}
};

59. 螺旋矩阵 II

跟上一题思想没有任何区别,就是输入、输出调过来,这并不是难点

class Solution {
public:vector<vector<int>> generateMatrix(int n) {vector<vector<int>> ret(n, vector<int>(n));int size = n*n, i = 1, left = 0, top = 0, right = n-1, bottom = n-1,row,col;while (i <= size) {for (row = top, col = left; col <= right && i <= size; col++, i++) {ret[row][col] = i;}top++;for (row = top, col = right; row <= bottom && i <= size; row++, i++) {ret[row][col] = i;}right--;for (row = bottom, col = right; col >= left && i <= size ;col--, i++) {ret[row][col] = i;}bottom--;for (row = bottom, col = left; row >= top && i <= size;row--, i++) {ret[row][col] = i;}left++;}return ret;}
};

885. 螺旋矩阵 III

这个题难很多,手动遍历思考就会发现前两题是层层剥开,这个题是层层加衣,思路出来,剩余的就是细节了,我偷懒空白部分也进行遍历,就是输出前做下判断

class Solution {
public:bool issafe(int row, int col, int rows, int cols){if (row >= 0 && row < rows && col >= 0 && col < cols) return true;return false;}vector<vector<int>> spiralMatrixIII(int rows, int cols, int rStart, int cStart) {int size = rows*cols, i = 1, left = cStart, top = rStart, right = left, bottom = top;vector<vector<int>> ret(size, vector<int>(2));int row,col;ret[0][0] = rStart;ret[0][1] = cStart;while (i < size) {right++;for (row = top, col = left+1; col <= right && i < size; col++) {if (issafe(row, col, rows, cols)) {//printf("[%d][%d][%d]1,",row,col,i);ret[i][0] = row;ret[i][1] = col;i++;}}bottom++;for (row = top+1, col = right; row <= bottom && i < size; row++) {if (issafe(row, col, rows, cols)) {//printf("[%d][%d][%d]1,",row,col,i);ret[i][0] = row;ret[i][1] = col;i++;}}left--;for (row = bottom, col = right-1; col >= left && i < size; col--) {if (issafe(row, col, rows, cols)) {//printf("[%d][%d][%d]1,",row,col,i);ret[i][0] = row;ret[i][1] = col;i++;}}top--;for (row = bottom-1, col = left; row >= top && i < size; row--) {if (issafe(row, col, rows, cols)) {//printf("[%d][%d][%d]1,",row,col,i);ret[i][0] = row;ret[i][1] = col;i++;}          }}return ret;}
};

c++数据结构与算法(6)——数组(螺旋矩阵)相关推荐

  1. 数据结构与算法---稀疏数组

    数据结构与算法-稀疏数组 1.基本介绍: ​ 当一个数组中大部分元素为0,或者为同一个值的数组时,可以使用稀疏数组来保存该数组. 2.稀疏数组的处理方法是: ​ (1)记录数组一共有几行几列,有多少个 ...

  2. 数据结构与算法之转圈打印矩阵和旋转正方形矩阵

    数据结构与算法之转圈打印矩阵和旋转正方形矩阵 目录 转圈打印矩阵 旋转正方形矩阵 1. 转圈打印矩阵 题目描述 代码实现 public class Code_PrintMatrixSpiralOrde ...

  3. JavaScript数据结构和算法简述——数组

    为什么先讲数组 数据结构可以简单的被分为线性结构和非线性结构. 线性结构大致包括: 数组(连续存储): 链表(离散存储): 栈(线性结构常见应用,由链表或数组增删和改进功能实现): 队列(线性结构常见 ...

  4. java数组螺旋矩阵从上到下_Java-基础编程(螺旋矩阵乘法表)

    package cn.rick.study; import java.io.BufferedReader; import java.io.InputStreamReader; import java. ...

  5. [数据结构与算法] 串,数组和广义表

    串偏向于算法,数组和广义表偏向于理解 第四章 串.数组和广义表 4.1 串的定义 4.2 案例引入 4.3 串的类型定义,存储结构及运算 4.3.1 **串的类型定义** 4.3.2 串的存储结构 4 ...

  6. 数据结构与算法--有序数组中找出和为s的两个数字

    有序数组中找和为s的两个数字 题目:输入一个递增排序的数组array, 和一个数字s, 在数组中找出两个数,使得这两个数的和是s,如果有多对,输出一对即可. 最简单方案 双循环,每次获取一个数据,和数 ...

  7. 数据结构与算法--将数组排成最小的数

    将数组排成最小的数 题目:输入一个正整数的数组,将数组中所有数字拼接在一起排列成一个新的数,打印能拼接出来的所有数字中最小的一个, 案例:输入数组{12,4,55},则能打印出最小的数组是:12455 ...

  8. 【数据结构与算法】数组与链表

    数组的定义和特性 数组(Array)是一种线性表数据结构.它用一组连续的内存空间,来存储一组具有相同类型的数据. 线性表(Linear List):数组.链表.队列.栈 非线性表:树 图 连续的内存空 ...

  9. 数据结构与算法基础-数组

    原文:chenmingyu.top/data-struct- 数组 数组是用于储存多个相同类型数据的集合,使用一段连续的内存空间存储数据 数组作为最基本的数据结构,想必大家一定已经足够了解,数组的增删 ...

  10. 菜鸟窝-数据结构与算法之数组实现队列

    categories: 数据结构与算法 tags: 队列 title: 数据结构与算法之队列 date: 数据结构之队列 定义:有序列表,可以通过数组或者链表实现,遵循先入先出的原则 数组实现普通队列 ...

最新文章

  1. 分布式技术追踪 2017年第十二期
  2. 【学习笔记】Android视图动画学习
  3. DCNv2 windows编译 2021ok
  4. git查找两个分支的共同节点
  5. python supper_python supper()函数
  6. SpringCloud-使用路由网关的服务过滤功能-拦截登录前是否有token为例
  7. Scala模式匹配:对规则进行匹配
  8. 「SVN」Linux下svn命令使用的实践,个人记录~=傻瓜教程
  9. 【趣话编程】一个整数+1引发的灾难
  10. datagrid获取页面总记录数的方法,datagrid获取页面总记录数为0的解决方法
  11. Steam挂了加速器还是打不开商店?库?黑屏?一招教你解决。
  12. python oserror怎么解决_Python读取csv报错解决方法:OSError: Initializing from file failed
  13. Java中的Math函数常用方法总结
  14. 知乎爬虫|既然所有的生命都要死亡,那么生命的意义是什么?
  15. 2020-10-17(学生管理系统)
  16. 在线格式化xml 工具
  17. 什么是数字孪生智慧城市应用场景
  18. 关于移动硬盘突然变成RAW格式数据该怎么恢复
  19. weka的java环境配置_weka学习(安装和部署)
  20. 多个三元表达式的写法

热门文章

  1. 关于Qwt的使用-QwtPlot
  2. 一些有意思的网页前端设计
  3. 【学习笔记1】分布式计算技术及框架
  4. 解决Windows资源保护找到了损坏文件但无法修复的问题
  5. 清晰度、对比度和锐化
  6. 系统首页优化-合并数据请求并发处理数据
  7. [SHOI2013] 发微博
  8. 7-4四种模型的解释_虚拟变量的设置以及交互项的解释
  9. [Windows驱动]INF文件
  10. jointjs Element