- 博客主頁:音符猶如代碼
- 系列專欄:算法練習
- 關注博主,后期持續更新系列文章
- 如果有錯誤感謝請大家批評指出,及時修改
- 感謝大家點贊👍收藏?評論?
?
目錄
思路
解題方法
時間復雜度
空間復雜度
Code?
思路
- 首先將指定位置填充為給定顏色。然后針對八個方向進行合法性檢查。
- 對于每個方向,調用一個專門的方法來計算中間不同顏色的數量,并判斷是否構成好線段。
解題方法
- 通過提取?
checkDirection
?方法來處理對單個方向的檢查邏輯,使得代碼更具模塊化和可讀性。 - 在?
checkDirection
?方法中,通過循環和條件判斷來統計中間顏色的數量,并根據情況決定是否構成好線段。
時間復雜度
O(1)
空間復雜度
O(1)
Code
class Solution {public boolean checkMove(char[][] board, int rMove, int cMove, char color) {board[rMove][cMove] = color;int n = 8;char between = color == 'W'? 'B' : 'W';if (checkDirection(board, rMove, cMove, -1, 0, between) ||checkDirection(board, rMove, cMove, 1, 0, between) ||checkDirection(board, rMove, cMove, 0, -1, between) ||checkDirection(board, rMove, cMove, 0, 1, between) ||checkDirection(board, rMove, cMove, -1, -1, between) ||checkDirection(board, rMove, cMove, 1, 1, between) ||checkDirection(board, rMove, cMove, -1, 1, between) ||checkDirection(board, rMove, cMove, 1, -1, between)) {return true;}return false;}private boolean checkDirection(char[][] board, int r, int c, int dr, int dc, char between) {int cnt = 0;int row = r + dr;int col = c + dc;while (isValid(row, col) && board[row][col]!= '.') {if (board[row][col] == between) {cnt++;} else if (board[row][col] == board[r][c]) {if (cnt > 0) {return true;}break;}row += dr;col += dc;}return false;}private boolean isValid(int row, int col) {return row >= 0 && row < 8 && col >= 0 && col < 8;}
}
?