5827. 检查操作是否合法
给你一个下标从 0 开始的 8 x 8 网格 board ,其中 board[r][c] 表示游戏棋盘上的格子 (r, c) 。棋盘上空格用 ‘.’ 表示,白色格子用 ‘W’ 表示,黑色格子用 ‘B’ 表示。
游戏中每次操作步骤为:选择一个空格子,将它变成你正在执行的颜色(要么白色,要么黑色)。但是,合法 操作必须满足:涂色后这个格子是 好线段的一个端点 (好线段可以是水平的,竖直的或者是对角线)。
好线段 指的是一个包含 三个或者更多格子(包含端点格子)的线段,线段两个端点格子为 同一种颜色 ,且中间剩余格子的颜色都为 另一种颜色 (线段上不能有任何空格子)。你可以在下图找到好线段的例子:
给你两个整数 rMove 和 cMove 以及一个字符 color ,表示你正在执行操作的颜色(白或者黑),如果将格子 (rMove, cMove) 变成颜色 color 后,是一个 合法 操作,那么返回 true ,如果不是合法操作返回 false 。
- 示例 1:
输入: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:
输入: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’ 。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/check-if-move-is-legal
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
解题思路
根据rMove 和 cMove 以及color,从board[rMove][cMove]向8个方向遍历,当出现遍历到空格子的情况,就不是合法的,或者当遍历到出现color的格子,但是线段中间没有别的颜色,那么也不是合法。
代码
class Solution {int[][] dir=new int[][]{{1,0},{0,1},{-1,0},{0,-1},{1,1},{-1,-1},{-1,1},{1,-1}};public boolean checkMove(char[][] board, int rMove, int cMove, char color) {for (int[] d : dir) {int x=rMove+d[0],y=cMove+d[1],len=0;boolean flag=false;while (x>=0&&x<8&&y>=0&&y<8){if (board[x][y]=='.'){break;}if (board[x][y]==color){if (len>=1)return true;break;}x=x+d[0];y=y+d[1];len++;}}return false;}
}
5827. 检查操作是否合法相关推荐
- Leetcode周赛5827. 检查操作是否合法
题目描述 给你一个下标从 0 开始的 8 x 8 网格 board ,其中 board[r][c] 表示游戏棋盘上的格子 (r, c) .棋盘上空格用 '.' 表示,白色格子用 'W' 表示,黑色格子 ...
- LeetCode 1958. 检查操作是否合法(模拟)
文章目录 1. 题目 2. 解题 1. 题目 给你一个下标从 0 开始的 8 x 8 网格 board ,其中 board[r][c] 表示游戏棋盘上的格子 (r, c) . 棋盘上空格用 '.' 表 ...
- Problem A: 判断操作是否合法(栈和队列)
Problem A: 判断操作是否合法(栈和队列) Time Limit: 1 Sec Memory Limit: 128 MB Submit: 67 Solved: 22 Description ...
- 入栈和出栈操作的合法序列判定
入栈和出栈操作的合法序列判定 [问题描述]假设以I和O分别表示入栈和出栈操作,栈的初态和终态均为空.入栈和出栈的操作序列表示为仅由I和O组成的序列.请编写程序判断一个给定序列是否合法. [输入形式]给 ...
- C++语言编写程序:输入电话号码,对电话号码的合法性进行检查,输出是否合法,不合法在屏幕上输出错误原因。电话号码合法要求:电话号码由三部分构成地区码:空白或三位数字前缀码:非“0“或”1”
一.题目:C++语言编写程序:输入电话号码,对电话号码的合法性进行检查,输出是否合法,不合法在屏幕上输出错误原因.电话号码合法要求:电话号码由三部分构成地区码:空白或三位数字前缀码:非"0& ...
- Python代码:检查学号是否合法
学号某学校设计的学号由8位数字组成,其中开头两位数字是2和0,第3位和第4位数字是18.19或20,请编写程序判断某学号是否合法. StuID = input("请输入学号:") ...
- python3 ipaddress模块 创建 检查 操作ip地址 简介
目录 1.创建地址对象--ipaddress.ip_address()函数 2.定义ip网络--ipaddress.ip_network()函数 3.查看网络中独立地址个数 4.打印主机地址 5.获取 ...
- 汉诺塔(三) 判断操作是否合法 + 栈(stack)数组
题目来源:http://acm.nyist.net/JudgeOnline/problem.php?pid=93 汉诺塔(三) 时间限制:3000 ms | 内存限制:65535 KB 难度:3 ...
- LeetCode 第 58 场力扣夜喵双周赛(动态规划、马拉车算法,前后缀处理)/ 第 253 场力扣周赛(贪心,LIS)
第 58 场力扣夜喵双周赛 两道600多 5193. 删除字符使字符串变好 题目描述 一个字符串如果没有 三个连续 相同字符,那么它就是一个 好字符串 . 给你一个字符串 s ,请你从 s 删除 最少 ...
最新文章
- js获取Html元素的实际宽度高度
- jenkins中配置Ant
- Node.js包管理器Yarn的入门介绍与安装
- Java 集合系列17之 TreeSet详细介绍(源码解析)和使用示例
- dp 树状数组 逆序元组
- 克隆对象和对象的继承
- HDU2602(背包)
- Use __doPostBack() As A Bridge
- fiddler响应中文乱码问题
- 顶级论文创新点怎么找?中国高校首次获CVPR最佳学生论文奖有感
- win10下点击开始菜单没响应的解决方案
- 大数据再出发-19Flink
- ini 文件 使用说明
- 夏普电视的html接口,夏普电视投屏设置方法
- 常用的设计模式(七)——门面设计模式
- R3DS Wrap基本使用方法
- 【科普】精度和分辨率的区别与联系
- L298N 驱动电机与单片机的线路连接图
- OPENWRT/LEDE编译教程
- Android PackageManager 基本使用