794. 有效的井字游戏
解题思路
根据游戏规则, 我们可以总结出如下的判断条件
- 因为先放X. 所以num(X)等于num(O) 或 num(O+1)
- 当X获胜, 则 num(X) = num(O+1) 且 X 满足获胜条件(横线/竖线/对角线都为X)
- 当O获胜, 则 num(x) = num(O) 且 O 满足获胜条件
代码
var validTicTacToe = function (board) {
let x = 0
let y = 0
board.forEach((b) => {
for (const c of b) {
if (c === 'X') x++
else if (c === 'O') y++
}
})
if (x !== y && x !== y + 1) return false
if (isWin('X') && x !== y + 1) return false
if (isWin('O') && x !== y) return false
return true
function isWin(p) {
if (
(p === board[0][0] && p === board[1][1] && p === board[2][2]) ||
(p === board[0][2] && p === board[1][1] && p === board[2][0])
)
return true
for (let i = 0; i < 3; i++) {
if (
(p === board[i][0] && p === board[i][1] && p === board[i][2]) ||
(p === board[0][i] && p === board[1][i] && p === board[2][i])
)
return true
}
return false
}
}