当前位置: 首页 > news >正文

【算法题】1958. 检查操作是否合法

插: 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。
坚持不懈,越努力越幸运,大家一起学习鸭~~~

题目:

给你一个下标从 0 开始的 8 x 8 网格 board ,其中 board[r][c] 表示游戏棋盘上的格子 (r, c) 。棋盘上空格用 '.' 表示,白色格子用 'W' 表示,黑色格子用 'B' 表示。

游戏中每次操作步骤为:选择一个空格子,将它变成你正在执行的颜色(要么白色,要么黑色)。但是,**合法 **操作必须满足:涂色后这个格子是 好线段的一个端点 (好线段可以是水平的,竖直的或者是对角线)。

好线段 指的是一个包含 **三个或者更多格子(包含端点格子)**的线段,线段两个端点格子为 同一种颜色 ,且中间剩余格子的颜色都为 另一种颜色 (线段上不能有任何空格子)。你可以在下图找到好线段的例子:
image.png

给你两个整数 rMovecMove 以及一个字符 color ,表示你正在执行操作的颜色(白或者黑),如果将格子 (rMove, cMove) 变成颜色 color 后,是一个 合法 操作,那么返回 true ,如果不是合法操作返回 false

示例 1:
image.png

输入:board = [[".",".",".","B",".",".",".","."],[".",".",".","W",".",".",".","."],[".",".",".","W",".",".",".","."],[".",".",".","W",".",".",".","."],["W","B","B",".","W","W","W","B"],[".",".",".","B",".",".",".","."],[".",".",".","B",".",".",".","."],[".",".",".","W",".",".",".","."]], rMove = 4, cMove = 3, color = "B"
输出:true
解释:'.','W' 和 'B' 分别用颜色蓝色,白色和黑色表示。格子 (rMove, cMove) 用 'X' 标记。
以选中格子为端点的两个好线段在上图中用红色矩形标注出来了。

示例2:
image.png

输入:board = [[".",".",".",".",".",".",".","."],[".","B",".",".","W",".",".","."],[".",".","W",".",".",".",".","."],[".",".",".","W","B",".",".","."],[".",".",".",".",".",".",".","."],[".",".",".",".","B","W",".","."],[".",".",".",".",".",".","W","."],[".",".",".",".",".",".",".","B"]], rMove = 4, cMove = 4, color = "W"
输出:false
解释:虽然选中格子涂色后,棋盘上产生了好线段,但选中格子是作为中间格子,没有产生以选中格子为端点的好线段。

提示:

board.length == board[r].length == 8
0 <= rMove, cMove < 8
board[rMove][cMove] == ‘.’
color 要么是 ‘B’ 要么是 ‘W’ 。

思路:遇到此类数组题,可以考虑使用dfs.

往8个方向dfs就行了。 时间复杂度O(1) 空间复杂度O(1)

java代码:

class Solution {public boolean checkMove(char[][] board, int rMove, int cMove, char color) {int[][] dirs = new int[][] {{0, -1}, {0, 1}, {-1, 0}, {1, 0}, {-1, -1}, {1, 1}, {-1, 1}, {1, -1}};//以rMove, cMove为起点,向8个方向查找for (int[] dir : dirs) {int x = dir[0], y = dir[1];int r = rMove + x, c = cMove + y, middleCnt = 0;while (isValid(r, c)) {// 如果中间有相反颜色的cnt>0,并且找到了另一个端点和color相同,则符合好线段,直接返回trueif (middleCnt >0 && board[r][c] == color) return true;// 如果找到了空格,则不符合,break掉本次while循环if (board[r][c] == '.') break;//如果中间还没有相反的颜色,下一个元素就和color相同,则不符合,break掉本次while循环if (middleCnt == 0 && board[r][c] == color) break;// 走到这里表示这个元素和color不相同,可以作为中间元素middleCnt++;r += x;c += y;}}return false;}/***   校验r、c是否走出数组边界*/private boolean isValid(int r, int c) {return 0 <= r && r < 8 && 0 <= c && c < 8;}   
}

相关文章:

【算法题】1958. 检查操作是否合法

插&#xff1a; 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站。 坚持不懈&#xff0c;越努力越幸运&#xff0c;大家一起学习鸭~~~ 题目&#xff1a; 给你一个下标从 0 开始的 8 x 8 网…...

十一、GoF之代理模式

1 对代理模式的理解 【在程序中&#xff0c;对象A和对象B无法直接交互时。】 【在程序中&#xff0c;功能需要增强时。】 【在程序中&#xff0c;目标需要被保护时】 业务场景&#xff1a;系统中有A、B、C三个模块&#xff0c;使用这些模块的前提是需要用户登录&#xff0c;也…...

MySQL5.6和JVM(1.6)调优

MySQL5.6调优 目标了解什么是优化掌握优化查询的方法掌握优化数据库结构的方法掌握优化MySQL服务器的方法什么是优化?合理安排资源、调整系统参数使MySQL运行更快、更节省资源。<...

【汇编】三、寄存器(一只 Assember 的成长史)

嗨~你好呀&#xff01; 我是一名初二学生&#xff0c;热爱计算机&#xff0c;码龄两年。最近开始学习汇编&#xff0c;希望通过 Blog 的形式记录下自己的学习过程&#xff0c;也和更多人分享。 上篇系列文章链接&#xff1a;【汇编】二、预备知识&#xff08;一只 Assember 的…...

TFT通信协议解析与应用

TFTP&#xff08;Trivial File Transfer Protocol&#xff09;是一种简单的文件传输协议&#xff0c;常用于在本地网络上的设备之间传输小型文件。 通信大致过程 TFTP通信过程如下&#xff1a; TFTP通信双方建立连接&#xff1a;TFTP客户端与TFTP服务器建立连接。TFTP服务器监…...

python 操作word库docx 增强接口

前言用python 的docx 库操作word完成一些自动化的文档生成工作&#xff0c;但有时候会遇到docx库提供的操作无法直接满足业务上的需求&#xff0c;需要对其进行一些扩展。接口完善实现在指定的文字后面插入指定的文字任务&#xff1a;以下示例需要在文档中的所有 "人生苦短…...

ARM uboot 源码分析9 - uboot的硬件驱动部分

一、uboot 与 linux 驱动 1、uboot 本身是裸机程序 (1) 裸机本来是没有驱动的概念的&#xff08;狭义的驱动的概念就是&#xff0c;操作系统中用来具体操控硬件的那部分代码叫驱动&#xff09; (2) 裸机程序中是直接操控硬件的&#xff0c;操作系统中必须通过驱动来操控硬件…...

Mybatis动态sql语句foreach中拼接正则表达式字符串注意事项

今天要说到的查询情况&#xff0c;平时项目里边其实用到的并不是很多&#xff0c;使用正则表达式无非是为了匹配结果比较灵活&#xff0c;最常见的&#xff0c;我们的查询条件一般一个参数仅仅只是一种情况的筛选&#xff0c;对于如何选择查询方式&#xff0c;主要还是要看前端…...

JVM内置锁synchronized关键字详解

目录 JVM内置锁synchronized关键字详解 设计同步器的意义 如何解决线程并发安全问题&#xff1f; synchronized原理详解 synchronized底层原理 synchronized在jdk1.6前后的变化【重点】 jdk小于1.6时 jdk>1.6时 轻量级锁何时升级为重量级锁&#xff1f;&#xff1f;…...

【2021.12.25】xv6系统入门学习

【2021.12.28】为xv6系统添加一个开机密码 文章目录【2021.12.28】为xv6系统添加一个开机密码0、说明1、Ubuntu20上安装xv62、测试指令3、修改系统代码4、添加自己的程序命令0、说明 xv6 是 MIT 设计的一个教学型操纵系统。 记录Ubuntu上安装x86版本的xv6系统&#xff0c;为其…...

Linux内核4.14版本——drm框架分析(4)——crtc分析

目录 1. struct drm_crtc结构体 2. crtc相关的API 2.1 drm_crtc_init_with_planes 2.5 drm_mode_setcrtc 3. func的一些介绍 3.1 struct drm_crtc_helper_funcs 3.2 struct drm_crtc_funcs 4. 应用层的调用 4.1 drmModeSetCrtc &#xff08;drmlib库里&#xff09;---…...

用原生js手写分页功能

分页功能如下&#xff1a; 数据分页显示&#xff0c;每页显示若干条数据&#xff0c;默认当前页码为第一页。例如&#xff1a;每页5条数据&#xff0c;则第一页显示 1-5 条&#xff0c;第二页显示 6-10 条&#xff0c;依此类推。当页码为第一页时&#xff0c;上一页为禁用状态…...

CornerNet介绍

CornerNet: Detecting Objects as Paired Keypoints ECCV 2018 Paper&#xff1a;https://arxiv.org/pdf/1808.01244v2.pdf Code&#xff1a;GitHub - princeton-vl/CornerNet 摘要&#xff1a; 提出了一种single-stage的目标检测算法CornerNet&#xff0c;它把每个目标检…...

【SpringBoot】日志使用

默认配置 Spring Boot默认帮我们配置好了日志 //记录器Logger logger LoggerFactory.getLogger(getClass());Testpublic void contextLoads() {//System.out.println();//日志的级别&#xff1b;//由低到高 trace<debug<info<warn<error//可以调整输出的日志级…...

关于slice扩容性能损耗的探究

背景 ​ 如果让我评选最伟大的数据结构&#xff0c;在我心中答案只有两个&#xff0c;数组和哈希表&#xff0c;这两个是我的程序的重要组成部分&#xff0c;同时也是我饭碗的重要组成部分。slice和map简洁明了的API很容易让我们有一种他们提供了无限大的空间&#xff0c;可以…...

Java实现单向链表

✅作者简介&#xff1a;热爱Java后端开发的一名学习者&#xff0c;大家可以跟我一起讨论各种问题喔。 &#x1f34e;个人主页&#xff1a;Hhzzy99 &#x1f34a;个人信条&#xff1a;坚持就是胜利&#xff01; &#x1f49e;当前专栏&#xff1a;Java数据结构与算法 &#x1f9…...

3月4日,30秒知全网,精选7个热点

///印度最大供电商罕见于现货市场购煤&#xff0c;能源供应短缺成忧 据知情人士透露&#xff0c;这家印度国有发电公司计划在下周左右发布300万吨的招标 ///QQ音乐推出AIGC黑胶播放器 这是国内音乐行业首个运用AI技术&#xff0c;通过文字、图片指令快速生成不同风格的播放器…...

EXCEL-职业版本(2)

Excel-职业版本&#xff08;2&#xff09; 定位 1.如何快速定位到不连续的空值&#xff0c;填充为0 1.在任意空单元格里复制0 2.选中数据区域CtrlA 3.CtrlG 4.选择【定位条件】 5.选择【空值】 6.ctrlV 粘贴 即可 2.怎么一次性计算每个小组的数量 单价和金额的和? 1.选中…...

java中延时队列的实现

大家好&#xff0c;我是一名CRUD工程师&#xff0c;最近我朋友突然来问我如何实现延时队列&#xff0c;我脱口而出就是MQ。不过突然想到公司的项目好像用的是java的一个原生类。于是我就想着趁周末的时间好好的去探究一下各方法实现延时队列的优缺点。 延迟消息 延迟消息就是字…...

基于java的circle buffer的实现

总目录链接==>> AutoSAR入门和实战系列总目录 文章目录 缓冲区示例什么是循环缓冲区?方法 1:使用数组插入元素删除元素方法 2:使用链表插入元素:删除元素:当数据经常从一个地方移动到另一个地方或从一个进程移动到另一个进程或被频繁访问时,它不能存储在永久性内存…...

像素剧本圣殿保姆级教程:从零配置到输出标准格式剧本的5步详解

像素剧本圣殿保姆级教程&#xff1a;从零配置到输出标准格式剧本的5步详解 1. 认识像素剧本圣殿 像素剧本圣殿是一款专为剧本创作者设计的AI辅助工具&#xff0c;它基于强大的Qwen2.5-14B-Instruct模型进行深度优化&#xff0c;特别适合需要快速生成专业格式剧本的创作者。与…...

告别锁相误差!基于DSOGI的正负序分离在Simulink中的建模与仿真全攻略

告别锁相误差&#xff01;基于DSOGI的正负序分离在Simulink中的建模与仿真全攻略 电力电子系统的核心挑战之一&#xff0c;是如何在电网电压不平衡条件下实现精确的相位同步。去年参与某微电网项目时&#xff0c;我们团队曾因传统锁相环在电压跌落时产生的相位抖动损失了关键数…...

React19 + Tailwindcss V4 实战:手把手教你打造一个高颜值标签输入与随机选择器

React19 Tailwindcss V4 实战&#xff1a;构建智能标签输入与随机决策工具 在今天的快节奏生活中&#xff0c;我们每天都要做出无数选择——从午餐吃什么到周末去哪玩&#xff0c;甚至团队建设时随机点名。作为开发者&#xff0c;我们可以用技术让这些决策过程变得有趣而高效。…...

基于支持向量机SVM预测飞机延误率的Python项目

数据挖掘项目-基于支持向量机svm预测飞机延误率&#xff08;python&#xff09; 关键技术&#xff1a;支持向量机SVMKNN 包含内容&#xff1a;数据集代码文档 &#xff08;字数8436&#xff09; 引言 飞机延误是航空运输中常见的问题。航班延误不仅影响乘客的出行体验&#x…...

Linux平台微信小程序开发终极指南:免费搭建完整开发环境

Linux平台微信小程序开发终极指南&#xff1a;免费搭建完整开发环境 【免费下载链接】wechat-web-devtools-linux 适用于微信小程序的微信开发者工具 Linux移植版 项目地址: https://gitcode.com/gh_mirrors/we/wechat-web-devtools-linux 在Linux系统上进行微信小程序开…...

AI赋能开发:让快马智能生成具备数据清洗与自然语言查询的行情网站

最近在做一个Python行情网站的项目&#xff0c;发现AI辅助开发真的能大幅提升效率。特别是数据清洗和自然语言处理这些传统上比较繁琐的部分&#xff0c;借助InsCode(快马)平台的AI能力&#xff0c;整个过程变得轻松多了。分享一下我的实践心得&#xff1a; 数据清洗自动化 行情…...

2026届最火的十大AI科研平台实测分析

Ai论文网站排名&#xff08;开题报告、文献综述、降aigc率、降重综合对比&#xff09; TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 学术写作需求有所增长之际&#xff0c;AI论文网站变成了研究者的关键辅助工具。当下主流众多…...

快速原型设计:基于快马平台构建vmware安装交互演示应用

今天想和大家分享一个特别实用的开发经验&#xff1a;如何用InsCode(快马)平台快速制作VMware虚拟机安装的交互式演示工具。这个项目特别适合技术文档编写者或IT培训师&#xff0c;能让你用最短时间把枯燥的安装教程变成生动可操作的原型。 为什么需要交互式演示&#xff1f; 传…...

Liquibase,数据库无关的版本控制工具!

在现代软件开发中&#xff0c;数据库的版本控制往往比代码版本控制更具挑战性。不同的开发环境、测试环境、生产环境可能使用不同的数据库产品&#xff08;如开发用H2、测试用MySQL、生产用PostgreSQL&#xff09;&#xff0c;而传统的SQL脚本往往包含特定数据库的方言&#xf…...

阿里云物联网平台OTA升级避坑指南:从版本号上报到Bin文件拉取的全流程排错

阿里云物联网平台OTA升级全链路排错实战手册 当设备固件需要远程更新时&#xff0c;OTA技术无疑是救星。但现实往往比理想骨感——版本号莫名失踪、升级包半路"走失"、设备在关键时刻"装聋作哑"。这些问题不仅耽误进度&#xff0c;更可能让生产线停摆。本文…...