描述
一個井字棋盤以字串陣列 board的形式給出,回傳true當且僅當在一個合法的井字棋游戲當中可能到達當前這種棋盤情況,
board是一個 3 x 3 的陣列, 包含字符' ', 'X', 和'O',字符 ’ '意味著這一格是空的,
以下是井字棋的游戲規則:
- 玩家需要輪流在空格上放置字符,
- 第一個玩家總是放置
'X'字符,第二個玩家總是放置'O'字符, 'X'和'O'總是被放置在空格上,不能放置在已有字符的格子上,- 當有3格相同的(非空)字符占據一行、一列或者一個對角線的時候,游戲結束,
- 當所有格子都非空的時候游戲也結束,
- 游戲結束后不允許多余操作,
說明
board是一個長度為3的字串陣列,其中每一個字串board[i]的長度為3.- 每一個
board[i][j]是一個在集合{' ', 'X', 'O'}當中的字符.
樣例
- 樣例1:
輸入:board = ["O ", " ", " "]
輸出:false
解釋:第一個玩家總是放置"X".
- 樣例2:
輸入: board = ["XOX", " X ", " "]
輸出: false
解釋:玩家輪流操作.
- 樣例3:
輸入: board = ["XXX", " ", "OOO"]
輸出: false
- 樣例4:
輸入: board = ["XOX", "O O", "XOX"]
輸出: true
決議
const validTicTacToe = function (board) {
let oCount=0,xCount=0;
for(let i=0;i<board.length;i++){
for(let j=0;j<board[i].length;j++){
board[i][j]==="X"&&xCount++
board[i][j]==="O"&&oCount++
}
}
//X和O的個數不相等且X的個數并沒與比O多1,則沒人獲勝
if(xCount!==oCount&&xCount!==oCount+1) return false;
//假如X獲勝,但是X的數量并沒有比O多1
if(win(board,"X")&&xCount!==oCount+1) return false;
//假如O獲勝,但是O的數量與X的數量不相等
if(win(board,"O")&&xCount!==oCount) return false;
return true;
};
function win(board,P){
for(let i=0;i<board.length;i++){
//同一行字符一樣
if(board[i][0]===P&&board[i][1]===P&&board[i][2]===P){
return true
}
//同一列字符一樣
if(board[0][i]===P&&board[1][i]===P&&board[2][i]===P){
return true
}
}
//對角線的字符是否一樣
if(board[0][0]===P&&board[1][1]===P&&board[2][2]===P){
return true
}
if(board[0][2]===P&&board[1][1]===P&&board[2][0]===P){
return true
}
return false
}
運行結果

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/76275.html
標籤:其他
