代码随想录训练营day 3|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.长度最小的子数组-中等
模拟行为
代码随想录训练营day 3|59.螺旋矩阵II 加 数组总结篇的更多相关文章
- leetcode 54. 螺旋矩阵 及 59. 螺旋矩阵 II
54. 螺旋矩阵 问题描述 给定一个包含 m x n 个元素的矩阵(m 行, n 列),请按照顺时针螺旋顺序,返回矩阵中的所有元素. 示例 1: 输入: [ [ 1, 2, 3 ], [ 4, 5, ...
- Java实现 LeetCode 59 螺旋矩阵 II
59. 螺旋矩阵 II 给定一个正整数 n,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的正方形矩阵. 示例: 输入: 3 输出: [ [ 1, 2, 3 ], [ 8, 9, 4 ...
- 【LeetCode】59.螺旋矩阵II
59.螺旋矩阵II 知识点:数组: 题目描述 给你一个正整数 n ,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix . 示例 输入:n = 3 ...
- 代码随想录第二天| 977.有序数组的平方 ,209.长度最小的子数组 ,59.螺旋矩阵II
2022/09/22 第二天 第一题 这题我就直接平方后排序了,很无脑但很快乐啊(官方题解是双指针 第二题 滑动窗口的问题,本来我也是直接暴力求解发现在leetCode上超时,看了官方题解,也是第一次 ...
- LeetCode 59. 螺旋矩阵 II(Spiral Matrix II)
题目描述 给定一个正整数 n,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的正方形矩阵. 示例: 输入: 3 输出: [ [ 1, 2, 3 ], [ 8, 9, 4 ], [ 7 ...
- 59. 螺旋矩阵 II
给定一个正整数 n,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的正方形矩阵. 示例: 输入: 3 输出: [ [ 1, 2, 3 ], [ 8, 9, 4 ], [ 7, 6, ...
- 【LeetCode-面试算法经典-Java实现】【059-Spiral Matrix II(螺旋矩阵II)】
[059-Spiral Matrix II(螺旋矩阵II)] [LeetCode-面试算法经典-Java实现][全部题目文件夹索引] 原题 Given an integer n, generate a ...
- LintCode-381.螺旋矩阵 II
螺旋矩阵 II 给你一个数n生成一个包含1-n^2的螺旋形矩阵 样例 n = 3 矩阵为 [ [ 1, 2, 3 ], [ 8, 9, 4 ], [ 7, 6, 5 ] ] 标 ...
- LeetCode(59):螺旋矩阵 II
Medium! 题目描述: 给定一个正整数 n,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的正方形矩阵. 示例: 输入: 3 输出: [ [ 1, 2, 3 ], [ 8, 9, ...
- [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 ...
随机推荐
- Java基础篇——常用类
Objec类 Test t1 = new Test(); Test t2 = new Test(); //toString方法,对某个对象的字符串输出 //getClass方法,返回该对象的Class ...
- .NET 7新特性
2022年11月份微软推出了带有STS(标准期限支持)的.NET版本7,仅提供18个月的支持. 微软今年推出了STS版本,因为它已经在2019年提到,它将在每年11月左右发布一个新版本的.NET. 但 ...
- 工作这么多年,我总结的数据传输对象 (DTO) 的最佳实践
前言 数据传输对象 (DTO) 是一种设计模式,常用于软件开发不同层或者不同系统之间传输数据.DTO 的主要目的是封装数据并防止它被其他层或系统直接访问或修改.通过遵循一组最佳实践,开发人员可以确保他 ...
- PHP转Go实践:xjson解析神器「开源工具集」
前言 近期会更新一系列开源项目的文章,新的一年会和大家做更多的开源项目,也欢迎大家加入进来. xutil 今天分享的文章源自于开源项目jinzaigo/xutil的封装. 在封装过程中,劲仔将实现原理 ...
- 前后端分离——使用OSS
1. 第一步:编写OSS的工具类 点击查看代码 aliyun: oss: keyid: 填写自己的 keysecret: 填写自己的 endpoint: 填写自己的 bucketname: 填写自己的 ...
- GDOI 2021 PJ 总结
Day 0.5 在门口等了好久,终于进去了. Day 1 下午来到考场,发现自己承诺书没有拿,然后就跑到宿舍去拿,回来发现只要身份证. T1一眼是个博弈,发现不太好打,先跳. T2发现最多消耗4320 ...
- Java + SikuliX 基于图像实现自动化测试
转载请注明出处️ 作者:测试蔡坨坨 原文链接:caituotuo.top/6d2908e8.html 你好,我是测试蔡坨坨. 由于目前大多数GUI工具均需要依赖于程序类型进行特征属性识别,例如:Sel ...
- mysql04-管理mysql常用指令
https://www.runoob.com/mysql/mysql-administration.html 1.常用指令 USE 数据库名 :选择要操作的Mysql数据库,使用该命令后所有Mysql ...
- 数值的扩展方法以及新增数据类型BigInt
二进制和八进制表示法 ES6提供了二进制和八进制数值的新的写法,分别用前缀0b(或0B)和0o或(0O)表示 0b111110111 === 503 // true; 0o767 === 503; / ...
- GIN--HOW POWERFUL GNN
HOW POWERFUL ARE GRAPH NEURAL NETWORKS? 本文是 Jure Leskovec 又一力作,首先对图神经网络的原理做了深入检出.提纲挈领的叙述,然后从原理方面介绍了如 ...