Leetcode2596. 检查骑士巡视方案

news/2024/10/22 15:30:43/

Every day a Leetcode

题目来源:2596. 检查骑士巡视方案

解法1:广度优先搜索

这是有点特殊的广度优先搜索,每个位置需要搜索 8 个方向,但最终只选择其中的一个方向走下去。

所以不需要使用队列,也不需要标记数组,来保存某个位置是否被访问过,只需要用两个变量 (x, y) 来表示当前位置即可。

代码:

/** @lc app=leetcode.cn id=2596 lang=cpp** [2596] 检查骑士巡视方案*/// @lc code=start
class Solution
{
private:const int dx[8] = {-2, -2, -1, -1, 2, 2, 1, 1};const int dy[8] = {-1, 1, -2, 2, -1, 1, -2, 2};public:bool checkValidGrid(vector<vector<int>> &grid){// 特判if (grid[0][0] != 0)return false;int n = grid.size();// 骑士会从棋盘的左上角出发int x = 0, y = 0;int index = 0, steps = n * n;for (index = 1; index < steps; index++){bool flag = false;for (int i = 0; i < 8; i++){int r = x + dx[i], c = y + dy[i];if (r >= 0 && r < n && c >= 0 && c < n && grid[r][c] == index){x = r, y = c;flag = true;break;}}if (flag == false)return false;}return true;}
};
// @lc code=end

结果:

在这里插入图片描述

复杂度分析:

时间复杂度:O(n2),其中 n 是数组 grid 的长度。

空间复杂度:O(1)。

解法2:模拟

依次检测每一次跳跃的行动路径是否为「日」字形。

代码:

// 模拟class Solution
{
public:bool checkValidGrid(vector<vector<int>> &grid){if (grid[0][0] != 0){return false;}int n = grid.size();vector<array<int, 2>> indices(n * n);for (int i = 0; i < n; i++)for (int j = 0; j < n; j++)indices[grid[i][j]] = {i, j};for (int i = 1; i < indices.size(); i++){int dx = abs(indices[i][0] - indices[i - 1][0]);int dy = abs(indices[i][1] - indices[i - 1][1]);if (dx * dy != 2)return false;}return true;}
};

结果:

在这里插入图片描述

复杂度分析:

时间复杂度:O(n2),其中 n 是数组 grid 的长度。

空间复杂度:O(n2),其中 n 是数组 grid 的长度。


http://www.ppmy.cn/news/1323809.html

相关文章

Win10电脑关闭OneDrive自动同步的方法

在Win10电脑操作过程中&#xff0c;用户想要关闭OneDrive的自动同步功能&#xff0c;但不知道具体要怎么操作&#xff1f;首先用户需要打开OneDrive&#xff0c;然后点击关闭默认情况下将文档保存到OneDrive选项保存&#xff0c;最后关闭在这台电脑上同步设置保存就好了。接下来…

【江科大STM32合集】day2按键控制LED光敏传感器控制峰鸣器

【STM32合集】day2按键控制LED&光敏传感器控制峰鸣器 电路基础c语言基础main.ckey.c结果 实现一个键开关灯实验结果避坑 电路基础 运算放大器-在江科大51单片机b站视频&#xff08;AD/DA&#xff09;复习 原理&#xff1a;两个极端 同相输入端电压 》反相输入端 电压输出最…

Pytorch各种Dropout层应用于详解

目录 torch框架Dropout functions详解 dropout 用途 用法 使用技巧 参数 数学理论公式 代码示例 alpha_dropout 用途 用法 使用技巧 参数 数学理论公式 代码示例 feature_alpha_dropout 用途 用法 使用技巧 参数 数学理论 代码示例 dropout1d 用途 用…

selinux简介

Selinux使用详解 注&#xff1a;redhat selinux使用说明文档&#xff1a;使用 SELinux Red Hat Enterprise Linux 8 | Red Hat Customer Portal 1、说明 selinux&#xff08;security enhanced linux安全性增强的linux&#xff09; 由美国安全局nsa&#xff08;national se…

HTML中常用标签--详解

目录 1.b/strong标签 2.i/em 标签 3.u标签 4.del删除线 5.br换行 6.p标签 * 7.pre 预处理标签 8.span标签** 9.div标签*** 10.sub标签 11.sup标签 12.hr标签 13.hn标签 14.HTML5中语义标签 特殊字符 15.多媒体标签 img*** a 标签*** 第一种用法&#xff1a;…

知识笔记(八十四)———链式语句中fetchSql和force和bind用法

fetchSql&#xff1a; fetchSql用于直接返回SQL而不是执行查询&#xff0c;适用于任何的CURD操作方法。 例如&#xff1a; $result Db::table(think_user)->fetchSql(true)->find(1);输出result结果为&#xff1a; SELECT * FROM think_user where id 1 force&#…

rust嵌入式开发补充

本文是对rust嵌入式开发的补充&#xff0c;就当时遗留的一些问题进行增补与修正。 RTIC中的任务处理 在上篇文章中还不是很理解rtic的工作机制。但写东东进行总结的好处就体现出来了&#xff0c;在上篇文章中提到了rtic的app入口本就是一个进程宏&#xff0c;所以在写完文章后…

cesium内部相同坐标在不同高度的2个点的属性机制坐标会gltf模型角度值异常问题mars3d的处理办法

模型一直向上运动的正常效果&#xff1a; 问题场景&#xff1a; 1.new mars3d.graphic.ModelPrimitive({使用addDynamicPosition(设置并添加动画轨迹位置&#xff0c;按“指定时间”运动到达“指定位置”时发现&#xff0c;如果是同一个点位不同高度值的y轴竖直向上方向的运动…