友谊路街道网站建设,群晖 套件 wordpress,杭州建设网站职称人才工作专题,阿里云wordpress升级给你一个下标从 0 开始的 8 x 8 网格 board #xff0c;其中 board[r][c] 表示游戏棋盘上的格子 (r, c) 。棋盘上空格用 ‘.’ 表示#xff0c;白色格子用 ‘W’ 表示#xff0c;黑色格子用 ‘B’ 表示。
游戏中每次操作步骤为#xff1a;选择一个空格子#xff0c;将它变…给你一个下标从 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[][] dirnew 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 xrMoved[0],ycMoved[1],len0;boolean flagfalse;while (x0x8y0y8){if (board[x][y].){break;}if (board[x][y]color){if (len1)return true;break;}xxd[0];yyd[1];len;}}return false;}
}