leetcode 54. Spiral Matrix 、59. Spiral Matrix II
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的更多相关文章
- leetcode 54. 螺旋矩阵 及 59. 螺旋矩阵 II
54. 螺旋矩阵 问题描述 给定一个包含 m x n 个元素的矩阵(m 行, n 列),请按照顺时针螺旋顺序,返回矩阵中的所有元素. 示例 1: 输入: [ [ 1, 2, 3 ], [ 4, 5, ...
- 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:二叉树下的不能相邻,求能 ...
- leetcode 169. Majority Element 、229. Majority Element II
169. Majority Element 求超过数组个数一半的数 可以使用hash解决,时间复杂度为O(n),但空间复杂度也为O(n) class Solution { public: int ma ...
- leetcode 39. Combination Sum 、40. Combination Sum II 、216. Combination Sum III
39. Combination Sum 依旧与subsets问题相似,每次选择这个数是否参加到求和中 因为是可以重复的,所以每次递归还是在i上,如果不能重复,就可以变成i+1 class Soluti ...
- leetcode 79. Word Search 、212. Word Search II
https://www.cnblogs.com/grandyang/p/4332313.html 在一个矩阵中能不能找到string的一条路径 这个题使用的是dfs.但这个题与number of is ...
- 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 ...
- leetcode 344. Reverse String 、541. Reverse String II 、796. Rotate String
344. Reverse String 最基础的旋转字符串 class Solution { public: void reverseString(vector<char>& s) ...
- leetcode 131. Palindrome Partitioning 、132. Palindrome Partitioning II
131. Palindrome Partitioning substr使用的是坐标值,不使用.begin()..end()这种迭代器 使用dfs,类似于subsets的题,每次判断要不要加入这个数 s ...
- leetcode 280.Wiggle Sort 、324. Wiggle Sort II
Wiggle Sort: 注意:解法一是每次i增加2,题目不是保证3个3个的情况,而是整个数组都要满足要求. 解法一错误版本: 如果nums的长度是4,这种情况下nums[i+1]会越界.但是如果你用 ...
随机推荐
- 逆向-攻防世界-crackme
查壳,nSpack壳,直接用软件脱壳,IDA载入程序. 很明显,就是将402130的数据和输入的数据进行异或,判断是否等于402150处的数据.dwrd占4字节. 这道题主要记录一下刚学到的,直接在I ...
- 使用清华开源镜像安装tensorflow
安装tensorflow时,如果使用直接安装速度相对较慢,采取清华大学的镜像会提高速度.GPU版本安装方法:pip install tensorflow-gpu==1.8 -i https://pyp ...
- MySQL学习(二)索引与锁 --- 2019年1月
1.Order By 是怎么工作的 MySQL做排序是一个成本比较高的操作.MySQL会为每个线程分配一个 sort_buffer 内存用于排序,该内存大小为 sort_buffer_size. 全字 ...
- 以前的博客内容迁至CSDN,博客名不变,以后博客将在两个平台同步更新
为了更好的利用博客园和csdn这两个博客家园,今天把博客园中的内容迁至csdn,博客名称还是使用cooldream2009,以后的文章将同步在博客园和csdn发表,特此声明.
- OpenCC的编译与多语言使用
OpenCC全称Open Chinese Convert,是一个Github上面的开源项目,主要用于简繁体汉字的转换,支持语义级别的翻译.本文就来简单介绍一下该库的编译以及python.C++和JAV ...
- shared_ptr和动态数组
std::shared_ptr智能指针是c++11一个相当重要的特性,可以极大地将开发者从资源申请/释放的繁重劳动中解放出来. 然而直到c++17前std::shared_ptr都有一个严重的限制,那 ...
- JVM的总结
1.JVM的内存模型 JVM主要由程序计数器,虚拟机栈,堆,方法区,本地方法区 1.程序计数器的功能是记录当前线程执行到了字节码文件的哪一行, JVM执行的是.java编译后的.class文件 2.虚 ...
- TrieTree
学习链接:https://blog.csdn.net/lisonglisonglisong/article/details/45584721 前缀树解决字符串前缀匹配问题,查找单词是否存在,统计以如“ ...
- Uncaught ReferenceError: jQuery is not defined
页面调试时,明明引入了JQ文件,却一直提示Uncaught ReferenceError: jQuery is not defined错误. 转自:http://blog.csdn.net/baicp ...
- 学习day01
1.web C/S:Client Server 客户端 服务器 QQ,... B/S:Browser Server 浏览器 服务器 PC机:Personal Computer 个人电脑 2.HTML ...