井字游戏00

news2024/9/24 15:19:37

题目链接

井字游戏

题目描述


注意点

  • 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;
    }
}

关键点

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1910334.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

开源项目预告Demo演示:应用极其简单的多级GUI库

之前在做项目的时候&#xff0c;需要用到多级GUI&#xff0c;当时使用的是用数组穷举列出来各个界面的方式&#xff08;也有人管它叫索引法&#xff09;&#xff0c;缺点也是很多的&#xff0c;比如开发繁琐&#xff0c;维护不便&#xff0c;难以添加过渡动画&#xff0c;各个界…

【基于R语言群体遗传学】-14-种群起源的相对似然

我们可以将预测的基因型比例视为在种群中看到一组特定等位基因的概率。如果种群在等位基因频率上存在差异&#xff0c;我们可以使用基因型来推断个体起源于每个种群的相对可能性。大家可以先看一下之前的博客&#xff1a;群体遗传学_tRNA做科研的博客-CSDN博客 种群起源的相对似…

同星智能正式推出CAN总线一致性测试系统

CAN总线一致性测试系统 CAN FD/CAN总线一致性测试系统&#xff0c;在硬件系统上基于同星自主研发的总线分析工具&#xff0c;干扰仪&#xff0c;一致性测试机箱&#xff0c;并搭配程控电源&#xff0c;示波器&#xff0c;数字万用表等标准外围仪器设备&#xff1b;在软件上基于…

Python轻松实现人脸检测,打造专业级AI颜值鉴定工具

Python实现人脸检测 1. 简介1.1 人脸检测的背景和意义1.2 使用Python进行人脸检测的优势1.2.1 多种成熟的库和工具1.2.2 开发者社区的支持1.2.3 简便易用的语法和库 2. 准备工作2.1 Python环境的安装2.1.1 下载Anaconda2.1.2 安装Anaconda2.1.3 使用Anaconda 2.2 第三方库的安装…

数据结构——Trie

题目&#xff1a; 维护一个字符串集合&#xff0c;支持两种操作&#xff1a; I x 向集合中插入一个字符串 x&#x1d465;&#xff1b;Q x 询问一个字符串在集合中出现了多少次。 共有 N&#x1d441; 个操作&#xff0c;所有输入的字符串总长度不超过 10^5&#xff0c;字符串仅…

使用Python绘制箱线图并分析数据

使用Python绘制箱线图并分析数据 在这篇博客中&#xff0c;我们将探讨如何使用Python中的pandas库和matplotlib库来绘制箱线图&#xff0c;并分析数据文件中的内容。箱线图是一种常用的图表类型&#xff0c;用于展示数据的分布情况及其统计特性&#xff0c;如中位数、四分位数…

【Linux】vim详解

1.什么是vi/vim? 简单来说&#xff0c;vi是老式的文本编辑器&#xff0c;不过功能已经很齐全了&#xff0c;但是还是有可以进步的地方。vim则可以说是程序开发者的一项很好用的工具&#xff0c;就连 vim的官方网站&#xff08; http://www.vim.org&#xff09;自己也说vim是一…

【Perforce】QAC-分析时如何不应用某些规则

【更多软件使用问题请点击亿道电子官方网站】 1、 文档目标 解决扫描项目时如何不应用某些规则进行分析。 2、 问题场景 对于一些建议性的MISRA规则&#xff0c;不想用于项目扫描&#xff0c;如何处理&#xff1f; 3、软硬件环境 1、软件版本&#xff1a;HelixQAC23.04 2…

STM32CubeIDE离线汉化教程

按照网上的方法下载好ZIP文件后 帮助->安装新软件-> 按顺序选择文件 点击完成&#xff0c;后等待右下脚的精度条到位即可

总结之企业微信(一)——创建外部群二维码,用户扫码入群

创建外部群 企微接口中没有直接通过服务端API接口创建外部群 可以通过jssdk创建外部群&#xff1a;引用jssdk调用会话接口wx.openEnterpriseChat https://work.weixin.qq.com/api/doc/90000/90136/90511 创建外部群二维码 需要通过企业微信的应用&#xff0c;并且配置客户联…

绝区陆--大语言模型的幻觉问题是如何推动科学创新

介绍 大型语言模型 (LLM)&#xff08;例如 GPT-4、LLaMA-2、PaLM-2、Claude-2 等&#xff09;已展示出为各种应用生成类似人类文本的出色能力。然而&#xff0c;LLM 的一个鲜为人知的方面是它们倾向于“产生幻觉”或生成不正确或没有根据的事实陈述。我不认为这仅仅是一个限制…

下载安装Microsoft DirectX SDK(June 2010)

官方下载网址如下&#xff1a; Microsoft DirectX SDK(June 2010)链接 下载后是一个.exe文件 在安装之前&#xff0c;需要先检查你的电脑中是否已经安装过&#xff08;如果你安装过VS&#xff0c;那么一定会有这两个文件&#xff09; Microsoft Visual C 2010 x86 Redistribu…

解决 NullReferenceException: Object reference not set to an instance of an object

在 Unity 中 利用 URDF Importer import UR5e_gripper 的 URDF file 时出现错误&#xff1a; NullReferenceException: Object reference not set to an instance of an object。 理论上是有个Object 是 Null&#xff0c;当我再次检查URDF后仍觉得路径没有写错。 于是我 把Mesh…

压缩感知2——算法模型

采集原理 其中Y就是压缩后的信号表示(M维)&#xff0c;Φ表示采集的测量矩阵&#xff0c;可以是一个随机矩阵&#xff0c;X代表原始的数字信号&#xff08;N维&#xff09;。 常见的测量矩阵——随机高斯矩阵 随机伯努利矩阵 稀疏随机矩阵等&#xff0c;矩阵需要满足与信号的稀…

SenseVoice - 阿里最新开源精准多语言语音识别与情感辨识模型 本地一键整合包下载

阿里巴巴近期发布了开源语音大模型项目FunAudioLLM&#xff0c;该项目包含了两个核心模型&#xff1a;SenseVoice和CosyVoice。可以精准多语言识别并且进行语音克隆 本地一键包下载地址&#xff1a; SenseVoice - 精准多语言语音识别与情感辨识模型 本地一键整合包下载 SenseVo…

Appium-移动端自动测试框架详解

Appium是一个开源跨平台移动应用自动化测试框架。 既然只是想学习下Appium如何入门&#xff0c;那么我们就直奔主题。文章结构如下&#xff1a; 为什么要使用Appium&#xff1f;如何搭建Appium工具环境?(超详细&#xff09;通过demo演示Appium的使用Appium如何实现移动端UI自…

基层医院、专科医院云HIS系统,支持电子病历四级,全套源码交付

云HIS系统采用B/S架构云端SaaS服务的方式提供&#xff0c;使用用户通过浏览器即能访问&#xff0c;无需关注系统的部署、维护、升级等问题&#xff0c;系统充分考虑了模板化、配置化、智能化、扩展化等设计方法&#xff0c;覆盖了基层医院的主要工作流程&#xff0c;能够与监管…

大模型常见的LoRA算法原理、实现和运用详解

文章目录 1. 前言2. 算法介绍2.1 微调2.2 核心思想 3. 几个关键问题3.1 LoRA如何应用在Transformer上3.2 LoRA的最佳秩r如何选择3.3 W W W和 Δ W \Delta W ΔW有什么关系 4. 源码5. 实际应用6. 总结7. 参考 1. 前言 本文是常用算法的快速浏览入门&#xff08;扫盲&#xff0…

升级iOS18有问题?学会这2招能解决90%iOS问题!

在 iOS 18beta发布后&#xff0c;有部分朋友升级后表示遇到了各种奇怪问题&#xff0c;比如升级卡在Apple Logo&#xff0c;黑屏&#xff0c;无限重启&#xff0c;卡在恢复模式&#xff0c;程序闪退&#xff0c;电池消耗过快&#xff0c;发烫等问题。 于是&#xff0c;小编决定…

HTML(27)——渐变

渐变是多个颜色逐渐变化的效果&#xff0c;一般用于设置盒子模型 线性渐变 属性&#xff1a;background-image : linear-gradient( 渐变方向 颜色1 终点位置, 颜色2 终点位置, ......&#xff09;&#xff1b; 取值: 渐变方向:可选 to 方位名词角度度数 终点位置:可选 百分…