LeetCode 2596. 检查骑士巡视方案
【LetMeFly】2596.检查骑士巡视方案
力扣题目链接:https://leetcode.cn/problems/check-knight-tour-configuration/
骑士在一张 n x n 的棋盘上巡视。在有效的巡视方案中,骑士会从棋盘的 左上角 出发,并且访问棋盘上的每个格子 恰好一次 。
给你一个 n x n 的整数矩阵 grid ,由范围 [0, n * n - 1] 内的不同整数组成,其中 grid[row][col] 表示单元格 (row, col) 是骑士访问的第 grid[row][col] 个单元格。骑士的行动是从下标 0 开始的。
如果 grid 表示了骑士的有效巡视方案,返回 true;否则返回 false。
注意,骑士行动时可以垂直移动两个格子且水平移动一个格子,或水平移动两个格子且垂直移动一个格子。下图展示了骑士从某个格子出发可能的八种行动路线。

示例 1:
输入:grid = [[0,11,16,5,20],[17,4,19,10,15],[12,1,8,21,6],[3,18,23,14,9],[24,13,2,7,22]] 输出:true 解释:grid 如上图所示,可以证明这是一个有效的巡视方案。
示例 2:
输入:grid = [[0,3,6],[5,8,1],[2,7,4]] 输出:false 解释:grid 如上图所示,考虑到骑士第 7 次行动后的位置,第 8 次行动是无效的。
提示:
n == grid.length == grid[i].length3 <= n <= 70 <= grid[row][col] < n * ngrid中的所有整数 互不相同
方法一:排序 + 模拟
创建一个indices数组,indices[i]代表第i步要跳到的位置(只需要遍历一遍grid数组即可完成indices数组)。
使用两个变量 n o w X nowX nowX和 n o w Y nowY nowY,代表当前的位置。
遍历indices数组,如果下一个位置 和 当前位置不是“日”字型,则返回false。
最终返回true。
细节描述:
Q1: 如何确定相邻两个位置是否是日字型?
A1: 看“横坐标之差×纵坐标之差”是否等于2。
Q2: 如何优雅地判断骑士是否由“左上角”出发?特判grid[0][0]是否为0不够优雅。
A2: 初始位置可以设置为(-2, -1),这样首个位置必须是(0, 0)才满足日字型。
- 时间复杂度 O ( n 2 ) O(n^2) O(n2),其中 s i z e ( g i r d ) = n × n size(gird) = n\times n size(gird)=n×n
- 空间复杂度 O ( n 2 ) O(n^2) O(n2)
AC代码
C++
typedef pair<int, int> pii;
class Solution {
public:bool checkValidGrid(vector<vector<int>>& grid) {int n = grid.size();vector<pii> indices(n * n);for (int i = 0; i < n; i++) {for (int j = 0; j < n; j++) {indices[grid[i][j]] = {i, j};}}int nowX = -2, nowY = -1;for (int i = 0; i < n * n; i++) {int nextX =indices[i].first, nextY = indices[i].second;if (abs(nowX - nextX) * abs(nowY - nextY) != 2) {return false;}nowX = nextX, nowY = nextY;}return true;}
};
Python
# from typing import Listclass Solution:def checkValidGrid(self, grid: List[List[int]]) -> bool:n = len(grid)indices = [0] * n ** 2for i in range(n):for j in range(n):indices[grid[i][j]] = [i, j]nowX, nowY = -2, -1for i in range(n * n):nextX, nextY = indices[i]if abs(nextX - nowX) * abs(nextY - nowY) != 2:return FalsenowX, nowY = indices[i]return True
同步发文于CSDN,原创不易,转载经作者同意后请附上原文链接哦~
Tisfy:https://letmefly.blog.csdn.net/article/details/132847346
相关文章:
LeetCode 2596. 检查骑士巡视方案
【LetMeFly】2596.检查骑士巡视方案 力扣题目链接:https://leetcode.cn/problems/check-knight-tour-configuration/ 骑士在一张 n x n 的棋盘上巡视。在有效的巡视方案中,骑士会从棋盘的 左上角 出发,并且访问棋盘上的每个格子 恰好一次 。…...
大数据学习1.0-目录
学习内容持续更新ing 1.大数据学习1.1-Centos8虚拟机安装 大数据学习1.0-Centos8虚拟机安装_汉卿HanQ的博客-CSDN博客 2.大数据学习1.2-yum配置 大数据学习1.2-yum配置_汉卿HanQ的博客-CSDN博客 3.大数据学习1.3-xShell配置jdk 大数据学习1.3-xShell配置jdk_汉卿HanQ的博客…...
无涯教程-JavaScript - POWER函数
描述 POWER函数返回加到幂的数字的输出。 语法 POWER (number, power)争论 Argument描述Required/OptionalNumber 基数。 它可以是任何实数。 RequiredPowerThe exponent to which the base number is raised.Required Notes 可以使用" ^"运算符代替POWER来指示…...
ChatGPT:解释Java中 ‘HttpResponse‘ 使用 ‘try-with-resources‘ 的警告和处理 ‘Throwable‘ 打印警告
ChatGPT:解释Java中 ‘HttpResponse’ 使用 ‘try-with-resources’ 的警告和处理 ‘Throwable’ 打印警告 我在IDEA中对一个函数的警告点击了ignore,怎么撤回这个呢 ChatGPT: 要撤回在IDEA中对一个函数的警告的忽略,您可以按照以…...
Linux编辑器-gcc的使用
一:背景知识 1.预处理(头文件展开、去注释、宏替换、条件编译) 2.编译(由C生成汇编) 3.汇编(生成及其可识别代码) 4.连接(生成可执行文件或库文件) 二:gcc…...
第16篇ESP32 platformio_arduino框架 wifi联网_连接WiFi热点并连接tcp server收发数据进行通讯
第1篇:Arduino与ESP32开发板的安装方法 第2篇:ESP32 helloword第一个程序示范点亮板载LED 第3篇:vscode搭建esp32 arduino开发环境 第4篇:vscodeplatformio搭建esp32 arduino开发环境 第5篇:doit_esp32_devkit_v1使用pmw呼吸灯实验 第6篇:ESP32连接无源喇叭播…...
day1| 704. 二分查找、27. 移除元素
704. 二分查找 题目链接:https://leetcode.cn/problems/binary-search/ 文档讲解:https://programmercarl.com/0704.%E4%BA%8C%E5%88%86%E6%9F%A5%E6%89%BE.html 视频讲解:https://www.bilibili.com/video/BV1fA4y1o715 1、二分法的前提 这道…...
R绘制箱线图
代码大部分来自boxplot()函数的帮助文件,可以通过阅读帮助文件,调整代码中相应参数看下效果,进而可以理解相应的作用,帮助快速掌握barplot()函数的用法。 语法 Usage(来自帮助文件) barplot(height, ...)## Default S3 method: …...
利用Audit审计系统行为
标题利用Audit审计系统行为 Linux Audit守护进程是一个可以审计Linux系统事件的框架 这个框架本身有数个组件,包括内核、二进制文件及其他文件。 1.内核audit:钩在内核中来捕获事件并将它们发送到auditd。 2.二进制文件 auditd:捕捉事件并…...
uniapp:不同权限设置不同的tabBar
1、在pages.json里,将所有tabBar涉及的页面都加进来。 我这里使用username来动态显示tabBar。 jeecg用户显示:首页,订单,消息,发现,我的,一共5个tabBar。 admin用户显示:首页&…...
如何将本地的项目上传到Git
一、GitHub or GitLab or Gitee创建一个新的仓库 二、仓库路径创建成功后,将本地项目上传到git 1. 进入本地项目所在文件夹位置,右击 2.出现git命令框 输入git init 在当前项目的目录中生成本地的git管理(会发现在当前目录下多了一个.git文件…...
[php] 文件上传的一个项目emmm
项目完整地址 <!DOCTYPE html> <html lang"zh"> <head><meta charset"UTF-8"><title>上传文件</title><link href"./css/bootstrap.min.css" rel"stylesheet"><style>font-face {fo…...
uniapp-时间格式和距离格式的转换
时间格式的转换 第一种是把 YYYY-MM-DD hh:mm:ss 转换成 MM月DD日 第二种是把 hh:mm:ss 转换成 hh:mm /*** 格式化时间 1* 把传入的完整时间分为 MM月DD日 的格式* returns*/ export function formatDate(timeStr) {const date new Date(timeStr);const month (date.ge…...
【卖出备兑看涨期权策略(Covered_call)】
卖出备兑看涨期权策略(Covered_call) 卖出备兑看涨期权策略是一种最基本的收入策略,该策略主要操作就是在持有标的资产的同时卖出对应的看涨期权合约,以此来作为从持有的标的资产中获取租金的一种方法。如果标的资产的价格上涨到…...
【校招VIP】测试算法考点之智力分析
考点介绍: 智力题(逻辑分析题)准备校招的同学们好好准备下,测试笔试中经常遇到。 测试算法考点之智力分析-相关题目及解析内容可点击文章末尾链接查看! 一、考点试题 1.5个囚犯在装有100颗豆子的袋子里摸,他们谁的存活几率大? 5个囚犯,分…...
【Linux 服务器运维】定时任务 crontab 详解 | 文末送书
文章目录 前言一、crontab 介绍1.1 什么是 crontab1.2 crontab 命令工作流程1.3 Linux 定时任务分类 二、crontab 用法详解2.1 crond 服务安装2.2 crontab 文件内容分析2.3 crontab 命令用法2.3.1 查看定时任务列表2.3.2 编辑/创建定时任务2.3.3 删除定时任务2.3.4 其他 cronta…...
Vue系列之入门篇
前言: 目录 一,关于Vue的简介 1.什么是Vue? 2.使用Vue框架的好处? 3. 库和框架的区别: 4. MVVM的介绍 5.Vue的入门案例 二,Vue的生命周期 一,关于Vue的简介 1.什么是Vue? Vu…...
【遥感卫星数据】Landsat数据Collection1和Collection2区别
文章目录 1 总体介绍2 Landsat Collection 13 Landsat Collection 23.1 Collection 2 Level-1产品3.2 Collection 2 Level-2产品参考资料1 总体介绍 Landsat卫星的产品数据每经过几年就会有一次改进,主要改进几何校正精度和辐射纠正精度。而且NASA/USGS每次更新产品都会把存档…...
socket() failed (24: Too many open files) while connecting to upstream, client
一、这个错误通常是因为文件句柄数目超过系统限制导致的。要解决这个问题,您可以尝试以下几个步骤: 调整系统文件句柄限制:您可以通过修改/etc/security/limits.conf文件中的nofile参数来增加系统文件句柄的最大数目。将nofile的值增加到更高…...
认识单链表
-之前我们学过储存数据的一种表——顺序表,那么为什么还有链表呢 首先我们回顾一下顺序表 顺序表是物理地址连续的一段内存空间(数组),我们通过动态内存开辟的, 那么: 顺序表也有自己的一些优点,…...
手把手教你用Simulink搭建BUCK电路:从主电路到PID整定的保姆级流程
手把手教你用Simulink搭建BUCK电路:从主电路到PID整定的保姆级流程 电力电子技术作为现代能源转换的核心,BUCK电路因其高效的降压特性被广泛应用于电源设计领域。对于初学者而言,理论知识与实际仿真之间往往存在一道难以跨越的鸿沟——明明理…...
PHP怎么处理Eloquent Attribute Harmonization属性协调_Laravel解决数据冲突【教程】
Eloquent 属性协调失败源于 $casts、访问器、序列化逻辑等机制作用域与执行顺序不一致;应优先用 $casts 处理类型转换,访问器仅用于动态计算,JSON 字段需显式标记 dirty 或拆分为关联模型。PHP 中 Eloquent 的 “Attribute Harmonization” 并…...
Android 14 + Linux 6.1 平台 RTL8822CE Wi‑Fi 适配实战:从 PCI 已枚举到成功扫描热点
摘要 在 Android 14 Linux 6.1 的移植过程中,RTL8822CE Wi‑Fi 很容易出现一种“硬件已经被 PCI 枚举到,但系统就是没有 wlan0”的尴尬状态。本文复盘一次完整的 RTL8822CE 适配过程,最终定位出两个连续阻塞点:第一,目…...
从USB3.2到PCIe 5.0:我的高速串行链路阻抗匹配踩坑实录(附Sigrity仿真文件)
从USB3.2到PCIe 5.0:我的高速串行链路阻抗匹配踩坑实录 去年负责一款数据中心加速卡的设计时,我遇到了职业生涯中最棘手的高速信号完整性问题。这块板卡需要同时支持PCIe 5.0 x16和四个USB3.2 Gen2x2接口,当第一批工程样机回来进行信号测试时…...
Android HWASan 详解:硬件标记原理、Clang 启用与排障实践
Android HWASan 详解:硬件标记原理、Clang 启用与排障实践 HWASan(Hardware-assisted AddressSanitizer)是面向 AArch64 的一类 Native(C/C)内存错误检测机制:利用指针与内存区域上的 短标签(T…...
shell脚本案例(dns主从服务配置)
dns主从服务配置主服务器shell脚本#!/bin/bashset -euo pipefail#configuration parametersMASTER_IP"192.168.153.131" DOMAIN"web.com" REV_ZONE"153.168.192.in-addr.arpa" SLAVE_IP"192.168.153.132"#tool parametersinfo(){ echo…...
跨平台桌面待办工具My-TODOs:本地存储的极简任务管理终极指南
跨平台桌面待办工具My-TODOs:本地存储的极简任务管理终极指南 【免费下载链接】My-TODOs A cross-platform desktop To-Do list. 跨平台桌面待办小工具 项目地址: https://gitcode.com/gh_mirrors/my/My-TODOs 你是否厌倦了云端任务管理工具的复杂界面和隐私…...
告别儿童遗忘悲剧:聊聊毫米波雷达如何实现车内活体检测(以TI方案为例)
告别儿童遗忘悲剧:毫米波雷达如何重塑车内安全防线 2021年夏天,美国得克萨斯州一位父亲在上班途中忘记将18个月大的女儿从汽车后座带出。当天下班时,室外温度已达38℃,等他在停车场找到孩子时,悲剧已经发生。类似事件在…...
别再只当SIM卡用了!用Python脚本和APDU命令,带你亲手“解剖”手机卡里的文件系统
用Python和APDU命令探索USIM卡文件系统的实战指南 当你把手机卡插入设备时,它不仅仅是一个身份标识——实际上,这是一套完整的微型操作系统。本文将带你用Python脚本和APDU命令,像安全研究员一样亲手探索USIM卡内的文件系统结构。 1. 准备工作…...
微信工具箱终极指南:3分钟快速掌握微信自动化管理技巧
微信工具箱终极指南:3分钟快速掌握微信自动化管理技巧 【免费下载链接】wechat-toolbox WeChat toolbox(微信工具箱) 项目地址: https://gitcode.com/gh_mirrors/we/wechat-toolbox 你是否厌倦了手动整理微信通讯录的繁琐?…...
