代码随想录训练营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 ...
随机推荐
- 孤独的照片【USACO 2021 December Contest Bronze】
孤独的照片 Farmer John 最近购入了 \(N\) 头新的奶牛,每头奶牛的品种是更赛牛(Guernsey)或荷斯坦牛(Holstein)之一. 奶牛目前排成一排,Farmer John 想要为 ...
- ClickHouse(11)ClickHouse合并树MergeTree家族表引擎之SummingMergeTree详细解析
目录 建表语法 数据处理 汇总的通用规则 AggregateFunction 列中的汇总 嵌套结构数据的处理 资料分享 参考文章 SummingMergeTree引擎继承自MergeTree.区别在于 ...
- 低版本客户端连接高版本数据库报错ORA-28040、ORA-01017
测试环境: 客户端:Oracle 11.2.0.1 服务端:Oracle 19.16 测试过程: 1.低版本客户端连接高版本数据库报错ORA-28040 2.低版本客户端连接高版本数据库报错ORA-0 ...
- 数据预处理时为什么要使用OneHot编码?
什么是LabelEncoder(整数编码) 整数编码 将一列文本数据转化成数值,即列中的每一个特征都通过一个整数来表示.例如,[red, blue, red, yellow] = [0,2,0,1]. ...
- 如何让Java编译器帮你写代码
作者:京东零售 刘世杰 导读 本文结合京东监控埋点场景,对解决样板代码的技术选型方案进行分析,给出最终解决方案后,结合理论和实践进一步展开.通过关注文中的技术分析过程和技术场景,读者可收获一种样板代码 ...
- Windows喝水记录工具v2.0
Windows喝水记录工具v2.0 作者以前基本不喝水,后面体检出来身体出现了一些问题(肾结晶什么的),多喝水可以减轻甚至痊愈,由于没有喝水的习惯怕喝多或者喝少,所以做了这个桌面小工具,喝一杯记录一下 ...
- RESTful相关信息整理
RESTful相关信息整理 参考:可以看的出来我是阮一峰的忠实读者 阮一峰的<理解RESTful架构> https://www.ruanyifeng.com/blog/2011/09/re ...
- prometheus+grafana监控体验
先上pom依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId> ...
- 【学习日志】Cglib动态代理和JDK动态代理的对比
Cglib JDK Proxy 实现方式 生成被代理类的子类 通过被代理类实现的接口+反射 速度 慢(曾经快于JDK Proxy,但JDK Proxy几次迭代后逐渐落后) 快 限制 被代理类不能是 ...
- scroll-view滚动导航自动居中
=> 代码片段:https://developers.weixin.qq.com/s/2fE1QWmE7xFR (复制在微信开发者工具打开) <!-- enable-flex ...