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:

[
[ , , ],
[ , , ],
[ , , ]
]

You should return [1,2,3,6,9,8,7,4,5].


题解:还是找规律的题:设有四个变量Xs,Xe,Ys,Ye,如下图所示,它们分别代表当前还未处理的子矩阵的边界,初始为图一所示;运算过程的某一时刻如图二所示

那么螺旋输出就是不停的重复以下四个步骤,直到矩阵所有的元素被输出:

1.输出matrix[Xs->Xe][Ys],Ys++  即1,2,3

2.输出matrix[Xe][Ys->Ye],Xe--  即6,9

3.输出matrix[Xe->Xs][Ye],Ye--  即8,7

4.输出matrix[Ye->Ys][Xs],Xs++  即4

代码如下:

 #include<iostream>
#include<vector>
using namespace std;
class Solution {
public:
vector<int> spiralOrder(vector<vector<int> > &matrix) {
vector<int> ans; if(matrix.size() == )
return ans; int Xs = ,Xe = matrix[].size()-,Ys = ,Ye = matrix.size()-;
int total = (Xe+) * (Ye+); for(int i = ;i <= total;){
for(int k = Xs;k <= Xe;k++)
{
ans.push_back(matrix[Ys][k]);
i++;
}
if(i >= total)
break;
else
Ys++; for(int k = Ys;k <= Ye;k++)
{
ans.push_back(matrix[k][Xe]);
i++;
}
if(i >= total)
break;
else
Xe--; for(int k = Xe;k >= Xs;k--)
{
ans.push_back(matrix[Ye][k]);
i++;
}
if(i >= total)
break;
else
Ye--; for(int k = Ye;k >= Ys;k--)
{
ans.push_back(matrix[k][Xs]);
i++;
}
if(i >= total)
break;
else
Xs++;
}
return ans;
}
};
int main(){
Solution s;
vector<vector<int> > m;
vector<int>temp(,);
m.push_back(temp); vector<int> ans(s.spiralOrder(m));
cout <<ans.size()<<endl;
}

这里学习到了怎么接受函数返回回来的向量,直接定义新的向量初始化为函数返回值就可以了,如代码65行所示。

【leetcode刷题笔记】Spiral Matrix的更多相关文章

  1. LeetCode刷题笔记和想法(C++)

    主要用于记录在LeetCode刷题的过程中学习到的一些思想和自己的想法,希望通过leetcode提升自己的编程素养 :p 高效leetcode刷题小诀窍(这只是目前对我自己而言的小方法,之后会根据自己 ...

  2. 【leetcode刷题笔记】Spiral Matrix II

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

  3. 18.9.10 LeetCode刷题笔记

    本人算法还是比较菜的,因此大部分在刷基础题,高手勿喷 选择Python进行刷题,因为坑少,所以不太想用CPP: 1.买股票的最佳时期2 给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格. ...

  4. LeetCode刷题笔记 - 12. 整数转罗马数字

    学好算法很重要,然后要学好算法,大量的练习是必不可少的,LeetCode是我经常去的一个刷题网站,上面的题目非常详细,各个标签的题目都有,可以整体练习,本公众号后续会带大家做一做上面的算法题. 官方链 ...

  5. Leetcode刷题笔记(双指针)

    1.何为双指针 双指针主要用来遍历数组,两个指针指向不同的元素,从而协同完成任务.我们也可以类比这个概念,推广到多个数组的多个指针. 若两个指针指向同一数组,遍历方向相同且不会相交,可以称之为滑动窗口 ...

  6. 【leetcode刷题笔记】Set Matrix Zeroes

    Given a m x n matrix, if an element is 0, set its entire row and column to 0. Do it in place. 题解:因为题 ...

  7. 【leetcode刷题笔记】Search a 2D Matrix

    Write an efficient algorithm that searches for a value in an m x n matrix. This matrix has the follo ...

  8. LeetCode刷题笔记(1-9)

    LeetCode1-9 本文更多是作为一个习题笔记,没有太多讲解 1.两数之和 题目请点击链接 ↑ 最先想到暴力解法,直接双循环,但是这样复杂度为n平方 public int[] twoSum(int ...

  9. leetcode刷题笔记

    (1)Best Time to Buy and Sell Stock Total Accepted: 10430 Total Submissions: 33800My Submissions Say ...

随机推荐

  1. java 根据生日计算年龄 Java问题通用解决代码

    根据生日计算年龄可以通过Calendar实现.最简单可以考虑get(Calendar.DAY_OF_YEAR)来简单修正年龄,但是遇到生日在闰年的2月29之后,或者今年是闰年的2月29之后可能出现计算 ...

  2. java swing内嵌浏览器,隐藏滚动条

    1 通过定义css样式表来解决 1 html{overflow-y:scoll;overflow:-moz-scrollbars-vertical;} 2 body{width:680px;heigh ...

  3. asp.net core mvc视频A:笔记2-2.接收数据

    传参方式一:使用内置方法传递 运行结果 其他获取方法 Session对象在HttpContext中 启用Session 使用Session 运行演示 传参方式二:数据绑定 普通类型(string).自 ...

  4. Security Testing Basics

    Security Testing BasicsSoftware security testing is the process of assessing and testing a system to ...

  5. Spring学习一----------Spring概况

    © 版权声明:本文为博主原创文章,转载请注明出处 Spring概况 Spring是为了解决企业应用开发的复杂性而创建的. Spring是一种轻量级的控制反转(IOC)和面向切面(AOP)的容器框架. ...

  6. 浅谈C/C++堆栈指引——C/C++堆栈

    C/C++堆栈指引 Binhua Liu 前言 我们经常会讨论这种问题:什么时候数据存储在飞鸽传书堆栈(Stack)中.什么时候数据存储在堆(Heap)中.我们知道.局部变量是存储在堆栈中的.debu ...

  7. awk.sed.grep三剑客详解

    事前准备1.主机node1:172.16.133.112.作为实验的文件/etc/passwd /etc/fstab qinqin cp /etc/passwd . cp /etc/fstab . 一 ...

  8. Spigot 算法之中的一个 计算调和级数的和

     我是首先在[1] 注意到 Spigot-Algorithm的,这个算法公布的相当早.见[2].  [1] 给出几个令人惊异的程序.仅仅用非常少的代码就能够计算e,pi,log(2)等常数. 当中 ...

  9. Parencodings - poj 1068

      Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 22764   Accepted: 13344 Description L ...

  10. JSP开发中的基础语法

    JSP 语法 JSP开发中的基础语法. 脚本程序 脚本程序可以包含任意量的Java语句.变量.方法或表达式,只要它们在脚本语言中是有效的. 脚本程序的语法格式: <% 代码片段 %> 或者 ...