59.螺旋矩阵II

题目链接:59.螺旋矩阵II

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

示例:

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

思考

螺旋矩阵没有暴力破解,只能通过四个for循环重复实现对不同数字的输入。螺旋矩阵的重要点在于判断最后一个列的数字个数和奇数大小矩阵时的中间位置的数字。

整个矩阵的实现是由两组循环实现的,最外层是while循环,用来控制一周的整体循环,每一行通过一个for循环实现一行内的输入输出。

处理规则:循环不变量原则

按左闭右开的规则对各边进行遍历,都从第一个节点开始处理,到最后一个节点不处理。

定义的i对应startx,j对应starty,二维数组中i控制行的数量,j控制列的数量。

每层长度通过offset进行控制,最外层就是1,每往内一层即+1。

螺旋矩阵的数字输入通过count进行计数,在每个for循环内都要自增一次

代码如下:

class Solution {
public:
vector<vector<int>> generateMatrix(int n){
vector<vector<int>> res(n, vector<int>(n, 0));//使用vector定义二维数组
int startx = 0, starty = 0;//定义好一个起始位置
int offset = 1;//定义一个终止位置并初始值为1,
int count = 1; //定义计数的初值为1
while( n/2){//这里n/2用来判断转了几圈,若n为奇数,最中间的数直接赋值 for(j = startx; j < n - offset; j++){
/*因为一般for里面就是i=0,但是现在i必须要从起始位置出发,
而且这个位置是会变得 ,另外这里用j不用i是因为..
阵类似【i,j】的i不变 j往右边移动 */
nums[startx][j] = count++;//第一行的数遍历完成
}
for(i = starty; i < n - offset; i++){
/*因为输出的是一个正方形的螺旋矩阵,每一条边都是n-offset
*/
sums[i][j] = count++;/*第一遍便利结束,相当于第一行结束转至一列
而此时二维数组的j是不变的,所以不应该是starty*/
}
for(; j > starty; j--){/*这里就不需要对j进行初始化操作,因为这时是
第三条遍历操作,ij都是最大值,而ij要满足左闭右开的原则,j》starty
*/
nums[i][j] = count++;//继续进行赋值操作
}
for(; i > startx; i--){/*同上类似*/
nums[i][j] = count++;
}
/*外圈转完一圈,开始内圈, 第二圈开始的时候,起始位置要各自加1,
例如:第一圈起始位置是(0, 0),第二圈起始位置是(1, 1)*/
startx++;
starty++; offset++;//这里的offset的含义是往里缩小的位数,看似加一,实则缩减一 }
if(n % 2 ==1){
nums[i][j] = count;//这是n为奇数时,走到中间的位置,等于count就行了
}
return nums;
} }

数组总结篇

首先要知道数组在内存中的存储方式,这样才能真正理解数组相关的面试题,数组是存放在连续内存空间上的相同类型数据的集合。数组可以方便的通过下标索引的方式获取到下标下对应的数据。

举一个字符数组的例子,如图所示:



最值得注意的几点:

1、数组下标都是从0开始的

2、数组内存空间的地址时连续的,所以在删除或者增添元素时,难免要移动其他元素的地址。

3、使用C++的话,要注意vector 和 array的区别,vector的底层实现是array,严格来讲vector是容器,不是数组。

4、数组的元素是不能删的,只能覆盖。

数组的经典题目:

二分法

704、二分查找-简单

35、搜索插入位置-简单

34.在排序数组中查找元素的第一个和最后一个位置-中等

69.x 的平方根-简单

367.有效的完全平方数-简单

双指针法

27、移除元素-简单

26.删除排序数组中的重复项-简单

283.移动零-简单

844.比较含退格的字符串-简单

977.有序数组的平方-简单

滑动窗口

904.水果成篮-中等

76.最小覆盖子串-困难

209.长度最小的子数组-中等

模拟行为

59.螺旋矩阵II-中等

54、螺旋矩阵-中等

代码随想录训练营day 3|59.螺旋矩阵II 加 数组总结篇的更多相关文章

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

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

  2. Java实现 LeetCode 59 螺旋矩阵 II

    59. 螺旋矩阵 II 给定一个正整数 n,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的正方形矩阵. 示例: 输入: 3 输出: [ [ 1, 2, 3 ], [ 8, 9, 4 ...

  3. 【LeetCode】59.螺旋矩阵II

    59.螺旋矩阵II 知识点:数组: 题目描述 给你一个正整数 n ,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix . 示例 输入:n = 3 ...

  4. 代码随想录第二天| 977.有序数组的平方 ,209.长度最小的子数组 ,59.螺旋矩阵II

    2022/09/22 第二天 第一题 这题我就直接平方后排序了,很无脑但很快乐啊(官方题解是双指针 第二题 滑动窗口的问题,本来我也是直接暴力求解发现在leetCode上超时,看了官方题解,也是第一次 ...

  5. LeetCode 59. 螺旋矩阵 II(Spiral Matrix II)

    题目描述 给定一个正整数 n,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的正方形矩阵. 示例: 输入: 3 输出: [ [ 1, 2, 3 ], [ 8, 9, 4 ], [ 7 ...

  6. 59. 螺旋矩阵 II

    给定一个正整数 n,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的正方形矩阵. 示例: 输入: 3 输出: [ [ 1, 2, 3 ], [ 8, 9, 4 ], [ 7, 6, ...

  7. 【LeetCode-面试算法经典-Java实现】【059-Spiral Matrix II(螺旋矩阵II)】

    [059-Spiral Matrix II(螺旋矩阵II)] [LeetCode-面试算法经典-Java实现][全部题目文件夹索引] 原题 Given an integer n, generate a ...

  8. LintCode-381.螺旋矩阵 II

    螺旋矩阵 II 给你一个数n生成一个包含1-n^2的螺旋形矩阵 样例 n = 3 矩阵为 [     [ 1, 2, 3 ],     [ 8, 9, 4 ],     [ 7, 6, 5 ] ] 标 ...

  9. LeetCode(59):螺旋矩阵 II

    Medium! 题目描述: 给定一个正整数 n,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的正方形矩阵. 示例: 输入: 3 输出: [ [ 1, 2, 3 ], [ 8, 9, ...

  10. [LeetCode] 59. Spiral Matrix II 螺旋矩阵 II

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

随机推荐

  1. SQLSERVER 的复合索引和包含索引到底有啥区别?

    一:背景 1. 讲故事 在 SQLSERVER 中有非常多的索引,比如:聚集索引,非聚集索引,唯一索引,复合索引,Include索引,交叉索引,连接索引,奇葩索引等等,当索引多了之后很容易傻傻的分不清 ...

  2. 10分钟做好 Bootstrap Blazor 的表格组件导出 Excel/Word/Html/Pdf

    上篇: Bootstrap Blazor 实战 通用导入导出服务(Table组件) 1.新建工程 新建工程b14table dotnet new blazorserver -o b14table 将项 ...

  3. [cocos2d-x]关于动画

    声明一下:看见这篇文章总结的已经非常好了,没必要再去自己到处东翻西找了,链接:http://shahdza.blog.51cto.com/2410787/1546998 [唠叨] 基本动画制作需要用到 ...

  4. pytorch 配置详细过程

    torch github 项目多 方便,api好调用 cpu版本 装torch 安装最新版本的就可以. torchvision 要版本对应 算法: torchvision版本号= torch版本号第一 ...

  5. c++ 跑酷小游戏之用户体验plus

    #undef UNICODE#undef _UNICODE#include <iostream>#include <iomanip>#include <string> ...

  6. Map集合概述-Map常用子类

    Map集合概述 现实生活中,我们常会看到这样的一种集合︰IP地址与主机名,身份证号与个人,系统用户名与系统用户对象等,这种--对应的关系,就叫做映射.Java提供了专门的集合类用来存放这种对象关系的对 ...

  7. python学习第四周总结

    异常常见类型 异常处理语法结构 异常补充处理 异常处理实战应用 生成器对象 自定义生成器range()功能 yield冷门用法 生成器表达式 模块简介 模块的分类 导入模块的两种句式 导入模块补充说明 ...

  8. ChatGPT:好家伙,每个人内心的一块魔镜

    这几天最火的话题就是ChatGPT,人人都在聊,人人都在社交圈或者vlog里面分享使用ChatGPT的聊天截图. 众生有众生相,每个人对这个AI工具有不同的感受和反应.我个人是非常接受ChatGPT, ...

  9. Vue05 初识

    1 下载vue.js 进入官网 下载两个版本的vue.js 开发版本和生成版本的区别 开发版本体量更大,包含完整的警告和调试模式 生成版本体量更小,删除了警告 2 打开VSCode 新建一个空文件夹v ...

  10. P31_全局配置 - window - 设置上拉触底的距离

    window 设置上拉触底的距离 概念:上拉触底是移动端的专有名词,通过手指在屏幕上的上拉滑动操作,从而加载更多数据的行为. 设置步骤: app.json -> window -> 为 o ...