查看原题
解题思路
棋盘可能达到的状态是:
- 玩家一下的 'X'个数 等于玩家二下的 ''O' 的个数或 'O'的个数加一
- 只能有一个玩家赢
- 当玩家一赢的时候,棋局上 'X'的个数等于'O'的个数加一
- 当玩家二赢的时候,棋局上'O'的个数等于'X'的个数
关键步骤:
- 求出棋盘上'X'和'O'的个数
- 判断是否符合条件一
- 若符合条件一继续执行,不符合则直接
return false
- 接下来判断是否有玩家获胜
- 当两个玩家都获胜则不符合条件
- 当只有玩家一获胜,判断棋局上 'X'的个数是否等于'O'的个数加一
- 当只有玩家二获胜,判断棋局上'O'的个数是否等于'X'的个数
玩家获胜的情况
- 水平的三个字符都一样:
board[i][0] === board[i][1] && board[i][1] === board[i][2]
- 垂直的三个字符都一样:
board[0][i] === board[1][i] && board[1][i] === board[2][i]
- 正对角线的三个字符一样:
board[0][0] === board[1][1] && board[1][1]=== board[2][2]
- 反对角线的三个字符都一样:
board[0][2] === board[1][1] && board[1][1]=== board[2][0]
代码
/**
* @param {string[]} board
* @return {boolean}
*/
var validTicTacToe = function(board) {
let XNumber = 0;//X的个数
let ONumber = 0;//O的个数
let player1Win = false;
let player2Win = false;
// 统计X和O的个数
for(let i = 0;i