井字游戏00

题目链接

井字游戏

题目描述


注意点

  • 1 <= board.length == board[i].length <= 100
  • 输入一定遵循井字棋规则

解答思路

  • 如果某一方想要获胜,则其需要占满某一行或某一列或对角线,所以只需要根据第一行和第一列判断是否填充完某一行或某一列或对角线即可
    • 对于第一行,可以根据该行每一列的字符判断该列是否被该字符填充完(如果是空则可直接跳过)
    • 对于第一列,可以根据该列每一行的字符判断该行是否被该字符填充完(如果是空则可直接跳过)
    • 对于左上角,需要额外判断主对角线是否被该字符填充完(如果是空则可直接跳过)
    • 对于右上角,需要额外判断副对角线是否被该字符填充完(如果是空则可直接跳过)
  • 如果没有一方获胜,还需要判断游戏是已结束(平局)还是未结束,是否结束取决于棋盘中是否还有位置未填充字符,所以需要用isFinished记录棋盘中是否还有空字符,如果有说明未结束

代码

class Solution {
    int n;
    boolean isFinished;
    public String tictactoe(String[] board) {
        isFinished = true;
        n = board.length;
        // 判断字符是否填充完某一行
        for (int row = 0; row < n; row++) {
            if (board[row].charAt(0) == ' ') {
                isFinished = false;
            } else {
                char c = board[row].charAt(0);
                if (isRow(row, c, board)) {
                    return String.valueOf(c);
                }
            }
        }
        // 判断字符是否填充完某一列
        for (int col = 0; col < n; col++) {
            if (board[0].charAt(col) == ' ') {
                isFinished = false;
            } else {
                char c = board[0].charAt(col);
                if (isCol(col, c, board)) {
                    return String.valueOf(c);
                }
            }
        }
        // 左上角的点判断是否满足主对角线
        if (board[0].charAt(0) == ' ') {
            isFinished = false;
        } else {
            char c = board[0].charAt(0);
            if (isMain(c, board)) {
                return String.valueOf(c);
            }
        }
        // 右上角的点判断是否满足副对角线
        if (board[0].charAt(n - 1) == ' ') {
            isFinished = false;
        } else {
            char c = board[0].charAt(n - 1);
            if (isSub(c, board)) {
                return String.valueOf(c);
            }
        }
        return isFinished ? "Draw" : "Pending";
    }

    public boolean isRow(int row, char c, String[] board) {
        for (int col = 0; col < n; col++) {
            if (board[row].charAt(col) == c) {
                continue;
            }
            if (board[row].charAt(col) == ' ') {
                isFinished = false;
            }
            return false;
        }
        return true;
    }

    public boolean isCol(int col, char c, String[] board) {
        for (int row = 0; row < n; row++) {
            if (board[row].charAt(col) == c) {
                continue;
            }
            if (board[row].charAt(col) == ' ') {
                isFinished = false;
            }
            return false;
        }
        return true;
    }

    public boolean isMain(char c, String[] board) {
        for (int i = 0; i < n; i++) {
            if (board[i].charAt(i) == c) {
                continue;
            }
            if (board[i].charAt(i) == ' ') {
                isFinished = false;
            }
            return false;
        }
        return true;
    }

    public boolean isSub(char c, String[] board) {
        for (int i = 0; i < n; i++) {
            if (board[i].charAt(n - i - 1) == c) {
                continue;
            }
            if (board[i].charAt(n - i - 1) == ' ') {
                isFinished = false;
            }
            return false;
        }
        return true;
    }
}

关键点

  • 井字棋取胜的规律
  • 注意边界问题

相关推荐

  1. 使用Python创建游戏

    2024-07-10 10:40:10       41 阅读
  2. 使用python写一个棋窗口小游戏

    2024-07-10 10:40:10       34 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-10 10:40:10       99 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-10 10:40:10       107 阅读
  3. 在Django里面运行非项目文件

    2024-07-10 10:40:10       90 阅读
  4. Python语言-面向对象

    2024-07-10 10:40:10       98 阅读

热门阅读

  1. LeetCode每日一题 分发糖果

    2024-07-10 10:40:10       33 阅读
  2. 刷算法Leetcode---9(二叉树篇Ⅲ)

    2024-07-10 10:40:10       32 阅读
  3. 【GC 死亡对象判断】

    2024-07-10 10:40:10       25 阅读
  4. [ABC275A] Find Takahashi 题解

    2024-07-10 10:40:10       24 阅读
  5. 洛谷 P2141 [NOIP2014 普及组] 珠心算测验

    2024-07-10 10:40:10       27 阅读
  6. 微软edge浏览器全解析

    2024-07-10 10:40:10       29 阅读
  7. react根据后端返回数据动态添加路由

    2024-07-10 10:40:10       27 阅读
  8. RedHat运维-Ansible自动化运维基础22-rhel-system-roles

    2024-07-10 10:40:10       22 阅读
  9. 深入浅出:Scikit-Learn基础教程

    2024-07-10 10:40:10       26 阅读
  10. python class

    2024-07-10 10:40:10       25 阅读
  11. 10.pwn ROP(栈溢出攻击的核心)

    2024-07-10 10:40:10       33 阅读
  12. sklearn基础教程

    2024-07-10 10:40:10       29 阅读