首页 > 其他分享 >【刷题笔记】59. Spiral Matrix II

【刷题笔记】59. Spiral Matrix II

时间:2023-09-22 23:32:20浏览次数:41  
标签:59 Matrix int res visit Spiral ++ && round

题目

Given a positive integer n, generate a square matrix filled with elements from 1 to n2 in spiral order.

Example:

Input: 3
Output:
[
 [ 1, 2, 3 ],
 [ 8, 9, 4 ],
 [ 7, 6, 5 ]
]

题目大意

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

解题思路

  • 给出一个数组 n,要求输出一个 n * n 的二维数组,里面元素是 1 - n*n,且数组排列顺序是螺旋排列的
  • 这一题是第 54 题的加强版,没有需要注意的特殊情况,直接模拟即可。

参考代码

package leetcode

func generateMatrix(n int) [][]int {
	if n == 0 {
		return [][]int{}
	}
	if n == 1 {
		return [][]int{{1}}
	}
	res, visit, round, x, y, spDir := make([][]int, n), make([][]int, n), 0, 0, 0, [][]int{
		{0, 1},  // 朝右
		{1, 0},  // 朝下
		{0, -1}, // 朝左
		{-1, 0}, // 朝上
	}
	for i := 0; i < n; i++ {
		visit[i] = make([]int, n)
		res[i] = make([]int, n)
	}
	visit[x][y] = 1
	res[x][y] = 1
	for i := 0; i < n*n; i++ {
		x += spDir[round%4][0]
		y += spDir[round%4][1]
		if (x == 0 && y == n-1) || (x == n-1 && y == n-1) || (y == 0 && x == n-1) {
			round++
		}
		if x > n-1 || y > n-1 || x < 0 || y < 0 {
			return res
		}
		if visit[x][y] == 0 {
			visit[x][y] = 1
			res[x][y] = i + 2
		}
		switch round % 4 {
		case 0:
			if y+1 <= n-1 && visit[x][y+1] == 1 {
				round++
				continue
			}
		case 1:
			if x+1 <= n-1 && visit[x+1][y] == 1 {
				round++
				continue
			}
		case 2:
			if y-1 >= 0 && visit[x][y-1] == 1 {
				round++
				continue
			}
		case 3:
			if x-1 >= 0 && visit[x-1][y] == 1 {
				round++
				continue
			}
		}
	}
	return res
}

标签:59,Matrix,int,res,visit,Spiral,++,&&,round
From: https://blog.51cto.com/u_16110811/7573176

相关文章

  • 调度器59—CONFIG_SCHED_DEBUG 的作用
    一、使能CONFIG_SCHED_DEBUG提供的文件1./proc/pid/sched文件cat显示统计数据,echo清0,无论echo的是啥。2./proc/sys/kernel下的sched_min_granularity_nssched_latency_nssched_sync_hint_enablesched_cstate_awaresched_wakeup_granularity_nssched_tunable_scalingsche......
  • 【LeetCode】2591. 将钱分给最多的儿童
    描述给你一个整数money,表示你总共有的钱数(单位为美元)和另一个整数children,表示你要将钱分配给多少个儿童。你需要按照如下规则分配:所有的钱都必须被分配。每个儿童至少获得1美元。没有人获得4美元。请你按照上述规则分配金钱,并返回最多有多少个儿童获得恰好8......
  • 概述NCP81599MNTXG USB供电(PD)控制器,NCP1342DADBDGD1R2G离线转换器、500kHz 9SOIC
    一、NCP81599 USB供电4开关降压升压控制器NCP81599MNTXGUSB供电(PD)控制器是一款同步降压升压控制器,经过优化,可将电池电压或适配器电压转换为笔记本电脑、平板电脑和台式机系统以及许多其他使用USBPD标准和C−型电缆的消费电子设备所需的电源轨。NCP81599专为需要动态控制压摆......
  • CF1869C Fill in the Matrix
    Link首先想一下,如果又一列的\(MEX\)是\(n\)会有什么样的要求?需要这一样有\(0~n-1\)的所有数字并且没有\(n\)当我们知道这一点以后问题就很好解决了.我们应该构造数列的时候,满足第一行的\(MEX\)为\(0\),第\(i\)行的\(MEX\)为\(i-1\),这样就可以达到最大的答案。当\(......
  • CF1599E Two Arrays
    Dq17y。考虑斐波那契通项公式,分别维护区间\(\left(\frac{1+\sqrt5}{2}\right)^{a_{1,i}+a_{2,i}}\)和\(\left(\frac{1-\sqrt5}{2}\right)^{a_{1,i}+a_{2,i}}\)的和。显然可以扩域,定义一个\(n=a+\sqrt5b\)的结构体即可。然后快速求斐波那契数列某项就可以直接快速幂了。......
  • 小夜灯CB证书CE证书LVD证书EMC证书FCC证书EN60598-2-12
    小夜灯检测报告找我办理。小夜灯GB7000.212报告,小夜灯IEC60598-2-12报告小夜灯EN60598-2-12报告小夜灯CE证书小夜灯FCC证书小夜灯ROHS证书小夜灯REACH证书小夜灯EN62471报告小夜灯SAA证书小夜灯CB证书小夜灯TUV证书小夜灯COC证书小夜灯LVD证书小夜灯EMC证书小夜灯I......
  • 59-嵌套循环练习-九九乘法表-打印表格数据
        打印上半截,靠右对齐,目前没实现      ......
  • P2759 奇怪的函数
    不学不知道,做过初升高暑假作业就会了。\[\largex=10^{\log_{10}^x}\]\[\largex^x=\left(10^{\log_{10}^x}\right)^x=10^{x\log_{10}^x}\]因为是达到或超过,所以指数下取整加一即是位数。然而\(x\)的范围比较大,直接枚举不行,要二分。......
  • abc253F - Operations on a Matrix
    F-OperationsonaMatrix初看起来感觉不是很好搞,主要是有赋值操作,我们需要知道的是最近一次在这个行上的赋值操作以及之间的贡献那么我们离线处理,每个3操作都往前找一个最近的同行2操作,然后两个做差就能得到中间的和。#include<algorithm>#include<cstdio>#include<cstrin......
  • 我的路灯CB证书IEC60598-2-3测试报告
    1标志灯具第2-3部分:特殊要求道路与街路照明灯具AS/NZS60598.2.3:2015,IEC60598-2-3:2002+A1:2011,EN60598-2-3:2003+A1:2011,BSEN60598-2-3:2003+A1:20113.52021-04-12灯具第2-3部分:特殊要求道路与街路照明灯具GB7000.203:20136不测:6(4.4)灯座6(4.6)......