首页 > 其他分享 >力扣-数组-螺旋矩阵

力扣-数组-螺旋矩阵

时间:2023-04-12 11:23:34浏览次数:34  
标签:res 矩阵 力扣 start range num 数组 offset 循环

 题目顺序

59螺旋矩阵Ⅱ,

解题思路

1.按照num从小到大依次填充,遵循从左到右,从上到下,从右到左,从下到上的层循环顺序;

2.层循环中要注意,每个部分保持相同的开闭原则,左闭右开或左开右闭防止混淆出错;

3.每层循环的start是不同的;每层循环的每部分个数依次减少;

4.注意n的奇偶,奇数单独对中心点进行赋值。

 

 

 1 class Solution(object):
 2     def generateMatrix(self, n):
 3         """
 4         :type n: int
 5         :rtype: List[List[int]]
 6         """
 7         res = [[0] * n for _ in range(n)] # 构造二维数组
 8         # L = [[0] * n] * n 不可用这句构造二维数组
 9         loop = n // 2 # 循环层数,奇数n还缺一个中心点
10         mid = n // 2 # 奇数时中心点坐标
11         start = 0 # 每层循环起始的点不同
12         num = 1 # 要填充的元素
13         for offset in range(1, loop+1):
14             # offset是循环偏移量,每层每行列要填充的数都会减少1
15             for i in range(start, n-offset):
16                 res[start][i] = num
17                 num += 1
18             for i in range(start, n-offset):
19                 res[i][n-offset] = num
20                 num += 1
21             for i in range(n-offset, start, -1):
22                 res[n-offset][i] = num
23                 num += 1
24             for i in range(n-offset, start, -1):
25                 res[i][start] = num
26                 num += 1
27             start += 1
28         if n%2==1:
29             res[mid][mid] = num
30         return res

# 类似二分法中要注意子区间的闭合,本题中也要遵循层循环中的上下左右四个部分的闭合;称之为循环不变量原则。

标签:res,矩阵,力扣,start,range,num,数组,offset,循环
From: https://www.cnblogs.com/shi-yi/p/17309177.html

相关文章

  • 108. 将有序数组转换为二叉搜索树
    给你一个整数数组nums,其中元素已经按升序排列,请你将其转换为一棵高度平衡二叉搜索树。高度平衡二叉树是一棵满足「每个节点的左右两个子树的高度差的绝对值不超过1」的二叉树。classSolution{public:TreeNode*sortedArrayToBST(vector<int>&nums){......
  • 哈希表:剑指 Offer 03. 数组中重复的数字
    题目描述:找出数组中重复的数字。在一个长度为n的数组nums里的所有数字都在0~n-1的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。   限制:2<=n<=100000 哈希表/Set利用数据......
  • latex · markdown | 如何编写矩阵、大公式
    1\left[\begin{array}{c} a&b\\ c&d\end{array}\right]效果:\[\left[\begin{array}{c} a&b\\ c&d\end{array}\right]\]2\min_{T_t^{set}}J=\lim_{N\rarr\infin}E\bigg\{\sum_{t=0}^{N-1}\Deltat\cdotP_t(T_t^{s......
  • 力扣1112(MySQL)-每位学生的最高成绩(中等)
    题目:表:Enrollments(student_id,course_id)是该表的主键。问题编写一个SQL查询,查询每位学生获得的最高成绩和它所对应的科目,若科目成绩并列,取course_id最小的一门。查询结果需按student_id增序进行排序。示例Enrollments表:Result表: 建表语句:1CreatetableIf......
  • C语言矩阵顺时针旋转90度和力扣34. 在排序数组中查找元素的第一个和最后一个位置
    #include<iostream>usingnamespacestd;#defineM5#include<stdlib.h>//原矩阵,某元素第n行第m列,;顺时针旋转90度后,位置变成倒数第n列,第m行//即先转置再水平翻转intn=0;voidrotation_90(intmatrix[][M],intn){ for(inti=0;i<n;i++) { for(intj=i;j<M;j++)......
  • #yyds干货盘点# LeetCode面试题:矩阵置零
    1.简述:给定一个 mxn的矩阵,如果一个元素为0,则将其所在行和列的所有元素都设为0。请使用原地算法。 示例1:输入:matrix=[[1,1,1],[1,0,1],[1,1,1]]输出:[[1,0,1],[0,0,0],[1,0,1]]示例2:输入:matrix=[[0,1,2,0],[3,4,5,2],[1,3,1,5]]输出:[[0,0,0,0],[0,4,5,0],[0,3,1,0]]......
  • 第九篇 手写原理代码 - 数组 【 实现 forEach、map、filter、every、some 】
    1、forEachArray.prototype.my_forEach=function(callback){for(leti=0;i<this.length;i++){callback(this[i],i,this);}};2、mapArray.prototype.my_map=function(callback){constarr=[];for(leti=0;i<this.length;......
  • 约瑟夫环问题---&解题方法 静态单链表&一维数组
      importjava.util.Scanner;publicclassMain{publicstaticvoidmain(String[]args){Scannerinput=newScanner(System.in);intn=input.nextInt();intm=input.nextInt();int[]ant=newint[150];for(int......
  • 广州大学第十七届ACM大学生程序设计竞赛 L. 因子模仿 - hard version 线段树维护矩阵
    传送门大致思路:  观察发现,茉美香胜利会叠加对手所有状态,茉美香失败会被对手叠加所有状态。我们可以用矩阵[a1,a2,b1,b2]表示两个人的状态(其中a1,a2表示茉美香,b1,b2表示对手)茉美香赢了之后的状态是[a1+b1,a2+b2,b1,b2],茉美香输了之后的状态是[a1,b1,a1+b1,......
  • python 开数组
     列表推导式~N=int(10)#二维数组a=[[jforiinrange(N)]forjinrange(20)]a[1][1]=8a[1][2]=2foriinrange(N):forjinrange(N):print(a[i][j],end='')print('')#多维数组a=[[[iforjinrange(N)]forkinrange(3)]......