代码随想录训练营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 ...
随机推荐
- [LeetCode]杨辉三角 II
题目 代码 class Solution { public: vector<int> getRow(int rowIndex) { vector<int> array(rowI ...
- 【原创】linux实时应用如何printf输出不影响实时性?
版权声明:本文为本文为博主原创文章,转载请注明出处 https://www.cnblogs.com/wsg1100.如有错误,欢迎指正. @ 目录 1. 前言 2. linux终端输出 3. 常见的N ...
- 关于 Dev-C++ 中缺少 iconv.h 的问题
前言 在 C++ 中有个扩展库 ext,里面有一些黑科技(hash, splay, binomial_heap 等等), 在 Windows 环境中,我们运行 Dev-C++ 并在头文件写 #incl ...
- Unity之UGUI鼠标进入离开&&拖拽实现
Unity之UGUI鼠标进入离开&&拖拽实现 前言: __小黑最近在写项目的时候就有个疑惑,UGUI中的Button组件,他的点击事件是怎么实现的!?我们自己能不能写一个!?之后在项目 ...
- Grafana 系列文章(七):Grafana Explore 中的 Tracing
️URL: https://grafana.com/docs/grafana/latest/explore/trace-integration/ Description: Tracing in Exp ...
- sync.Once 使用及解析
目录 前言 1. sync.Once 简介 2. sync.Once 源码解析 2.1 为什么 done 作为第一个字段 2.2 Do 方法的实现细节 2.3 其他重要细节 3. sync.Once ...
- KingbaseES恢复被删除数据
KingbaseES恢复被删除数据 生产环境操作请先备份整个data目录或cp 当前数据目录/home/kingbase/pg_data到新的data目录,然后在备份的data目录进行恢复被删除数据操 ...
- 20个 Git 命令玩转版本控制
想要在团队中处理代码时有效协作并跟踪更改,版本控制发挥着至关重要的作用.Git 是一个版本控制系统,可以帮助开发人员跟踪修订.识别文件版本,并在必要的时候恢复旧版本.Git 对于有一定编程经验的用户来 ...
- WPF中使用LibVLCSharp.WPF 播放rtsp
目录 LibVLCSharp.WPF简介 vlc:VideoView基本使用 安装LibVLC 播放rtsp 引入命名空间 xaml 代码 cs代码 截图 概述 代码示例 vlc:VideoView进 ...
- qt元对象系统之 Q_PROPERTY宏
这个宏需要和Q_OBJECT宏结合使用, moc工具为Q_OBJECT宏所声明的变量和函数生成定义 同时为Q_PROPERTY宏添加函数的映射,以便qt_static_metacall 能够寻找到对应 ...