54题是把二维数组安卓螺旋的顺序进行打印,59题是把1到n平方的数字按照螺旋的顺序进行放置

54. Spiral Matrix

start表示的是每次一圈的开始,每次开始其实就是从(0,0)、(1,1)这种开始的。

用endx、endy来表示每次转圈的x、y方向的终止位置,方便后面进行边界条件设置。

注意:后面start < endx && start < endy、start < endy && start < endx-1都必须同时满足x、y的条件,不然会出现错误

为什么后面判断条件的时候要多个判断,因为这里使用的是4个if,如果第二个if没有执行,实际上是不应该执行第三个if,但是如果不加&&多个条件判断,代码实际上会运行。

class Solution {
public:
vector<int> spiralOrder(vector<vector<int>>& matrix) {
vector<int> result;
int row = matrix.size();
if(row <= )
return result;
int col = matrix[].size();
if(col <= )
return result;
int start = ;
while(start* < row && start* < col){
int endx = row - - start;
int endy = col - - start;
for(int i = start;i <= endy;i++)
result.push_back(matrix[start][i]);
if(start < endx){
for(int i = start + ;i <= endx;i++)
result.push_back(matrix[i][endy]);
}
if(start < endx && start < endy){
for(int i = endy - ;i >= start;i--)
result.push_back(matrix[endx][i]);
}
if(start < endy && start < endx - ){
for(int i = endx - ;i >= start + ;i--)
result.push_back(matrix[i][start]);
}
start++;
}
return result;
}
};

59. Spiral Matrix II

与54题差不多,只是用一个num来表示当前存储的数字,每个计算num++

class Solution {
public:
vector<vector<int>> generateMatrix(int n) {
vector<vector<int>> result(n,vector<int>(n));
int row = n,col = n,start = ;
int num = ;
while(start* < row && start* < col){
int endx = row - - start;
int endy = col - - start;
for(int i = start;i <= endy;i++){
num++;
result[start][i] = num;
}
if(start < endx){
for(int i = start + ;i <= endx;i++){
num++;
result[i][endy] = num;
}
}
if(start < endx && start < endy){
for(int i = endy - ;i >= start;i--){
num++;
result[endx][i] = num;
}
}
if(start < endy && start < endx - ){
for(int i = endx - ;i >= start + ;i--){
num++;
result[i][start] = num;
}
}
start++;
}
return result;
}
};

leetcode 54. Spiral Matrix 、59. Spiral Matrix II的更多相关文章

  1. leetcode 54. 螺旋矩阵 及 59. 螺旋矩阵 II

    54. 螺旋矩阵 问题描述 给定一个包含 m x n 个元素的矩阵(m 行, n 列),请按照顺时针螺旋顺序,返回矩阵中的所有元素. 示例 1: 输入: [ [ 1, 2, 3 ], [ 4, 5, ...

  2. leetcode 198. House Robber 、 213. House Robber II 、337. House Robber III 、256. Paint House(lintcode 515) 、265. Paint House II(lintcode 516) 、276. Paint Fence(lintcode 514)

    House Robber:不能相邻,求能获得的最大值 House Robber II:不能相邻且第一个和最后一个不能同时取,求能获得的最大值 House Robber III:二叉树下的不能相邻,求能 ...

  3. leetcode 169. Majority Element 、229. Majority Element II

    169. Majority Element 求超过数组个数一半的数 可以使用hash解决,时间复杂度为O(n),但空间复杂度也为O(n) class Solution { public: int ma ...

  4. leetcode 39. Combination Sum 、40. Combination Sum II 、216. Combination Sum III

    39. Combination Sum 依旧与subsets问题相似,每次选择这个数是否参加到求和中 因为是可以重复的,所以每次递归还是在i上,如果不能重复,就可以变成i+1 class Soluti ...

  5. leetcode 79. Word Search 、212. Word Search II

    https://www.cnblogs.com/grandyang/p/4332313.html 在一个矩阵中能不能找到string的一条路径 这个题使用的是dfs.但这个题与number of is ...

  6. leetcode 263. Ugly Number 、264. Ugly Number II 、313. Super Ugly Number 、204. Count Primes

    263. Ugly Number 注意:1.小于等于0都不属于丑数 2.while循环的判断不是num >= 0, 而是能被2 .3.5整除,即能被整除才去除这些数 class Solution ...

  7. leetcode 344. Reverse String 、541. Reverse String II 、796. Rotate String

    344. Reverse String 最基础的旋转字符串 class Solution { public: void reverseString(vector<char>& s) ...

  8. leetcode 131. Palindrome Partitioning 、132. Palindrome Partitioning II

    131. Palindrome Partitioning substr使用的是坐标值,不使用.begin()..end()这种迭代器 使用dfs,类似于subsets的题,每次判断要不要加入这个数 s ...

  9. leetcode 280.Wiggle Sort 、324. Wiggle Sort II

    Wiggle Sort: 注意:解法一是每次i增加2,题目不是保证3个3个的情况,而是整个数组都要满足要求. 解法一错误版本: 如果nums的长度是4,这种情况下nums[i+1]会越界.但是如果你用 ...

随机推荐

  1. 微信小程序开发之多图片上传+服务端接收

    前言: 业务需求,这次需要做一个小程序同时选中三张图片一起上传到服务端,后端使用的.NET WEBAPI接收数据保存. 使用技术: 在这章中将会使用到微信小程序wx.uploadFile(Object ...

  2. CSS揭秘—灵活的背景图(三)

    前言: 所有实例均来自<CSS揭秘>,该书以平时遇到的疑难杂症为引,提供解决方法,只能说秒极了,再一次刷新了我对CSS的认知 该书只提供了关键CSS代码,虽然有在线示例代码链接,但访问速度 ...

  3. 【Netty】(5)源码 Bootstrap

    [Netty]5 源码 Bootstrap 上一篇讲了AbstractBootstrap,为这篇做了个铺垫. 一.概述 Bootstrap 是 Netty 提供的一个便利的工厂类, 我们可以通过它来完 ...

  4. 【Android Studio安装部署系列】二十三、Android studio查看Gradle版本号

    版权声明:本文为HaiyuKing原创文章,转载请注明出处! 概述 File——Project Structure 单击Project 可以看到,当前项目的gradle版本号是4.4. 参考资料 An ...

  5. 【Python3爬虫】用Python发送天气预报邮件

    此次的目标是爬取指定城市的天气预报信息,然后再用Python发送邮件到指定的邮箱. 一.爬取天气预报 1.首先是爬取天气预报的信息,用的网站是中国天气网,网址是http://www.weather.c ...

  6. 挖一挖@Bean这个东西

    有Bean得治 任何一个正常程序的访问都会在内存中创建非常多的对象,对象与对象之间还会出现很多依赖关系(一个处理业务逻辑的类中几乎都会使用到别的类的实例),一般的做法都是使用new关键字来创建对象,对 ...

  7. Windows10下安装Docker的步骤

    一.启用Hyper-V 打开控制面板 - 程序和功能 - 启用或关闭Windows功能,勾选Hyper-V,然后点击确定即可,如图: 点击确定后,启用完毕会提示重启系统,我们可以稍后再重启. 二.安装 ...

  8. 玩转Spring Cloud之熔断降级(Hystrix)与监控

    本文内容导航目录: 前言:解释熔断降级一.搭建服务消费者项目,并集成 Hystrix环境 1.1.在POM XML中添加Hystrix依赖(spring-cloud-starter-netflix-h ...

  9. Linux 用户与组的基本操作及文件权限位的设置方法

    用户的基本操作 添加用户: useradd xxx 查看所有的用户: cat /etc/passwd 用户更改组: usermod -G groups loginname 将用户从组中删除: gpas ...

  10. js中let和var的区别 不懂得加QQ 2270312758

    js中使用let定义变量的时候,是需要使用严格模式的,我看到网上有的博客说:如果在不使用严格模式的情况下,使用let会报错,但是在实验的过程中,我直接定义了let变量而且也没有使用严格模式,并没有报任 ...