日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪(fǎng)問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

Leetcode周赛5827. 检查操作是否合法

發(fā)布時(shí)間:2025/3/19 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Leetcode周赛5827. 检查操作是否合法 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

題目描述

給你一個(gè)下標(biāo)從?0?開(kāi)始的?8 x 8?網(wǎng)格?board?,其中?board[r][c]?表示游戲棋盤(pán)上的格子?(r, c)?。棋盤(pán)上空格用?'.'?表示,白色格子用?'W'?表示,黑色格子用?'B'?表示。

游戲中每次操作步驟為:選擇一個(gè)空格子,將它變成你正在執(zhí)行的顏色(要么白色,要么黑色)。但是,合法?操作必須滿(mǎn)足:涂色后這個(gè)格子是?好線(xiàn)段的一個(gè)端點(diǎn)?(好線(xiàn)段可以是水平的,豎直的或者是對(duì)角線(xiàn))。

好線(xiàn)段?指的是一個(gè)包含?三個(gè)或者更多格子(包含端點(diǎn)格子)的線(xiàn)段,線(xiàn)段兩個(gè)端點(diǎn)格子為?同一種顏色?,且中間剩余格子的顏色都為?另一種顏色?(線(xiàn)段上不能有任何空格子)。你可以在下圖找到好線(xiàn)段的例子:

給你兩個(gè)整數(shù)?rMove?和?cMove?以及一個(gè)字符?color?,表示你正在執(zhí)行操作的顏色(白或者黑),如果將格子?(rMove, cMove)?變成顏色?color?后,是一個(gè)?合法?操作,那么返回?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' 分別用顏色藍(lán)色,白色和黑色表示。格子 (rMove, cMove) 用 'X' 標(biāo)記。 以選中格子為端點(diǎn)的兩個(gè)好線(xiàn)段在上圖中用紅色矩形標(biāo)注出來(lái)了。

示例 2:

輸入:board = [[".",".",".",".",".",".",".","."],[".","B",".",".","W",".",".","."],[".",".","W",".",".",".",".","."],[".",".",".","W","B",".",".","."],[".",".",".",".",".",".",".","."],[".",".",".",".","B","W",".","."],[".",".",".",".",".",".","W","."],[".",".",".",".",".",".",".","B"]], rMove = 4, cMove = 4, color = "W" 輸出:false 解釋:雖然選中格子涂色后,棋盤(pán)上產(chǎn)生了好線(xiàn)段,但選中格子是作為中間格子,沒(méi)有產(chǎn)生以選中格子為端點(diǎn)的好線(xiàn)段。

?解題代碼

class Solution {public static void main(String[] args) {// write your code here}public boolean checkMove(char[][] board, int rMove, int cMove, char color) {if (color == 'B') {return check(board, rMove, cMove, 'B', 'W');} else {return check(board, rMove, cMove, 'W', 'B');}}public boolean check(char[][] board, int x, int y, char startColor, char midColor) {final char KONG = '.';// 判斷八個(gè)方向是否有好線(xiàn)段// 1. 向右if (x <= 5 && board[x + 1][y] == midColor) {for (int i = x + 2; i <= 7; i++) {if (board[i][y] == startColor) {//第一種情況,找到了端點(diǎn)return true;} else if (board[i][y] == KONG) {//第二種情況。發(fā)現(xiàn)了空,線(xiàn)段不成。break;}// 第三種情況,找到了中間顏色,繼續(xù)向下。}}// 2. 向左if (x >= 2 && board[x - 1][y] == midColor) {for (int i = x - 2; i >= 0; i--) {if (board[i][y] == startColor) {//第一種情況,找到了端點(diǎn)return true;} else if (board[i][y] == KONG) {//第二種情況。發(fā)現(xiàn)了空,線(xiàn)段不成。break;}// 第三種情況,找到了中間顏色,繼續(xù)向下。}}// 3. 向上if (y >= 2 && board[x][y - 1] == midColor) {for (int i = y - 2; i >= 0; i--) {if (board[x][i] == startColor) {//第一種情況,找到了端點(diǎn)return true;} else if (board[x][i] == KONG) {//第二種情況。發(fā)現(xiàn)了空,線(xiàn)段不成。break;}// 第三種情況,找到了中間顏色,繼續(xù)向下。}}// 4. 向下if (y <= 5 && board[x][y + 1] == midColor) {for (int i = y + 2; i <= 7; i++) {if (board[x][i] == startColor) {//第一種情況,找到了端點(diǎn)return true;} else if (board[x][i] == KONG) {//第二種情況。發(fā)現(xiàn)了空,線(xiàn)段不成。break;}// 第三種情況,找到了中間顏色,繼續(xù)向下。}}// 5. 向右下if (y <= 5 && x <= 5 && board[x + 1][y + 1] == midColor) {for (int i = 2; x + i <= 7 && y + i <= 7; i++) {if (board[x + i][y + i] == startColor) {//第一種情況,找到了端點(diǎn)return true;} else if (board[x + i][y + i] == KONG) {//第二種情況。發(fā)現(xiàn)了空,線(xiàn)段不成。break;}// 第三種情況,找到了中間顏色,繼續(xù)向下。}}// 6. 向左下if (y <= 5 && x >=2 && board[x - 1][y + 1] == midColor) {for (int i = 2; x -i >=0&& y + i <= 7; i++) {if (board[x - i][y + i] == startColor) {//第一種情況,找到了端點(diǎn)return true;} else if (board[x - i][y + i] == KONG) {//第二種情況。發(fā)現(xiàn)了空,線(xiàn)段不成。break;}// 第三種情況,找到了中間顏色,繼續(xù)向下。}}// 7. 向右上if (y >=2 && x <= 5 && board[x + 1][y - 1] == midColor) {for (int i = 2; x + i <= 7 && y - i >=0; i++) {if (board[x + i][y - i] == startColor) {//第一種情況,找到了端點(diǎn)return true;} else if (board[x + i][y - i] == KONG) {//第二種情況。發(fā)現(xiàn)了空,線(xiàn)段不成。break;}// 第三種情況,找到了中間顏色,繼續(xù)向下。}}// 8. 向左上if (y >=2 && x >=2 && board[x - 1][y - 1] == midColor) {for (int i = 2; x - i >=0 && y - i >=0; i++) {if (board[x - i][y - i] == startColor) {//第一種情況,找到了端點(diǎn)return true;} else if (board[x - i][y - i] == KONG) {//第二種情況。發(fā)現(xiàn)了空,線(xiàn)段不成。break;}// 第三種情況,找到了中間顏色,繼續(xù)向下。}}return false;}}

總結(jié)

以上是生活随笔為你收集整理的Leetcode周赛5827. 检查操作是否合法的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。