54. 螺旋矩阵

问题描述

给定一个包含 m x n 个元素的矩阵(m 行, n 列),请按照顺时针螺旋顺序,返回矩阵中的所有元素。

示例 1:

输入:
[
[ 1, 2, 3 ],
[ 4, 5, 6 ],
[ 7, 8, 9 ]
]
输出: [1,2,3,6,9,8,7,4,5]
示例 2: 输入:
[
[1, 2, 3, 4],
[5, 6, 7, 8],
[9,10,11,12]
]
输出: [1,2,3,4,8,12,11,10,9,5,6,7]

问题分析

这道题也是从最外层往最内层循环,定义四个边界up,down,left,right记录目前层数的位置即可。

代码

class Solution {
public:
vector<int> spiralOrder(vector<vector<int>>& matrix) {
int m = matrix.size();
vector<int> ans;
if(m==0)return ans;
int n = matrix[0].size();
ans.resize(m*n);
int index = 0,up = 0,down = m - 1,left = 0,right = n - 1,i;
while(1)
{
for(i = left; i <= right; ++i)ans[index++] = matrix[up][i];//从左往右遍历
if(++up > down)break;
for(i = up; i <= down; ++i)ans[index++] = matrix[i][right];//从上往下遍历
if(--right < left)break;
for(i = right; i >= left; --i)ans[index++] = matrix[down][i];//从右往左遍历
if(--down < up)break;
for(i = down; i >= up; --i)ans[index++] = matrix[i][left];//从下往上遍历
if(++left > right)break;
}
return ans;
}
};

59. 螺旋矩阵 II

问题描述

给定一个正整数 n,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的正方形矩阵。

示例:

输入: 3
输出:
[
[ 1, 2, 3 ],
[ 8, 9, 4 ],
[ 7, 6, 5 ]
]

代码

class Solution {
public:
vector<vector<int>> generateMatrix(int n) {
vector<vector<int>> ans;
if(n <= 0) return ans;
ans.resize(n);
int i,j,up = 0,down = n-1,left = 0,right = n-1,var = 0;
for(i = 0;i < n; i++)ans[i].resize(n);
while(true)
{
for(i = left;i <= right; ++i)ans[up][i] = ++var;
if(++up > down)break;
for(i = up; i <= down; ++i)ans[i][right] = ++var;
if(--right < left)break;
for(i = right; i >= left; --i)ans[down][i]=++var;
if(--down < up)break;
for(i = down; i >= up; --i)ans[i][left] = ++var;
if(++left > right)break;
}
return ans; }
};

最新文章

  1. Javascript的二进制数据处理学习 ——nodejs环境和浏览器环境分别分析
  2. 编写Java应用程序。首先,定义描述学生的类——Student,包括学号(int)、 姓名(String)、年龄(int)等属性;二个方法:Student(int stuNo,String name,int age) 用于对对象的初始化,outPut()用于输出学生信息。其次,再定义一个主类—— TestClass,在主类的main方法中创建多个Student类的对象,使用这些对象来测 试Stud
  3. 绿色通道(codevs 3342)
  4. Android布局— — —线性布局
  5. C#基础-ref、out
  6. poj2993 poj2669
  7. java语句与流程控制
  8. 为什么不能在scrollview中直接添加一个image,然后使animation.begin()??
  9. [css 揭秘]:CSS揭秘 技巧(三):背景定位
  10. linux常用基本命令整理小结
  11. Codeforces Round #483 (Div. 2)
  12. bzoj 3282: Tree (Link Cut Tree)
  13. [luogu3380][bzoj3196]【模板】二逼平衡树【树套树】
  14. java接口深入
  15. Spring3 (事务管理)
  16. metaclass(元类)
  17. 2019-4-25 html学习笔记
  18. python将一个列表的元素随机打乱
  19. Vue.nextTick和Vue.$nextTick
  20. java图形用户界面之列表框

热门文章

  1. C++ happens-before 关系是不可传递的
  2. java 8 启动脚本优化
  3. Python+Robot Framework实现UDS诊断自动化测试
  4. java 图形化小工具Abstract Window Toolit
  5. 【LeetCode】1003. Check If Word Is Valid After Substitutions 解题报告(Python)
  6. 【剑指Offer】构建乘积数组 解题报告(Python)
  7. leetcode1261在受污染的二叉树中查找元素
  8. A. Lorenzo Von Matterhorn
  9. 魔法串(hud4545)
  10. MyEclipse编写jsp很卡的修改方法 (转载)