794.有效的井字游戏
链接:794.有效的井字游戏
难度:Medium
标签:数组、矩阵
简介:给你一个字符串数组 board 表示井字游戏的棋盘。当且仅当在井字游戏过程中,棋盘有可能达到 board 所显示的状态时,才返回 true 。
题解 1 - typescript
- 编辑时间:2021-12-09
- 执行用时:76ms
- 内存消耗:39.3MB
- 编程语言:typescript
- 解法介绍:检测数量是否相等或 x 多一个,检测是否不同时获胜,检测 x 获胜时,x 多一个,o 获胜时 o 与 x 数量相等。
function validTicTacToe(board: string[]): boolean {
  let cntO = 0,
    cntX = 0,
    checkO = check('O'),
    checkX = check('X');
  for (let i = 0; i < 3; i++) {
    for (let j = 0; j < 3; j++) {
      const ch = board[i][j];
      if (ch === 'X') cntX++;
      else if (ch === 'O') cntO++;
    }
  }
  if (
    (cntO !== cntX && cntO !== cntX - 1) ||
    (checkO && checkX) ||
    (checkO && cntO !== cntX) ||
    (checkX && cntO !== cntX - 1)
  )
    return false;
  return true;
  function check(ch: string) {
    return (
      (board[0][0] === ch && board[0][1] === ch && board[0][2] === ch) ||
      (board[1][0] === ch && board[1][1] === ch && board[1][2] === ch) ||
      (board[2][0] === ch && board[1][2] === ch && board[2][2] === ch) ||
      (board[0][0] === ch && board[1][0] === ch && board[2][0] === ch) ||
      (board[0][1] === ch && board[1][1] === ch && board[2][1] === ch) ||
      (board[0][2] === ch && board[1][2] === ch && board[2][2] === ch) ||
      (board[0][0] === ch && board[1][1] === ch && board[2][2] === ch) ||
      (board[0][2] === ch && board[1][1] === ch && board[2][0] === ch)
    );
  }
}