文章目录

  • 1. 题目
  • 2. 解题

1. 题目

用字符串数组作为井字游戏的游戏板 board。当且仅当在井字游戏过程中,玩家有可能将字符放置成游戏板所显示的状态时,才返回 true。

该游戏板是一个 3 x 3 数组,由字符 " ","X" 和 "O" 组成。字符 " " 代表一个空位。

以下是井字游戏的规则:

  • 玩家轮流将字符放入空位(" ")中。
  • 第一个玩家总是放字符 “X”,且第二个玩家总是放字符 “O”
  • “X” 和 “O” 只允许放置在空位中,不允许对已放有字符的位置进行填充。
  • 当有 3 个相同(且非空)的字符填充任何行、列对角线时,游戏结束。
  • 当所有位置非空时,也算为游戏结束。
  • 如果游戏结束,玩家不允许再放置字符。
示例 1:
输入: board = ["O  ", "   ", "   "]
输出: false
解释: 第一个玩家总是放置“X”。示例 2:
输入: board = ["XOX", " X ", "   "]
输出: false
解释: 玩家应该是轮流放置的。示例 3:
输入: board = ["XXX", "   ", "OOO"]
输出: false示例 4:
输入: board = ["XOX", "O O", "XOX"]
输出: true说明:
游戏板 board 是长度为 3 的字符串数组,
其中每个字符串 board[i] 的长度为 3。board[i][j] 是集合 {" ", "X", "O"} 中的一个字符。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/valid-tic-tac-toe-state
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2. 解题

class Solution {public:bool validTicTacToe(vector<string>& board) {int X = 0, O = 0, winX = 0, winO = 0;for(int i = 0; i < 3; ++i)for(int j = 0; j < 3; ++j){if(board[i][j]=='X') X++;else if(board[i][j]=='O') O++;}if(X < O || X > O+1) return false;//个数差不对for(int i = 0; i < 3; ++i){    //3行if(board[i][0]==board[i][1] && board[i][1]==board[i][2]){if(board[i][0] == 'X')winX++;else if(board[i][0] == 'O')winO++;}}for(int i = 0; i < 3; ++i){ //3列if(board[0][i]==board[1][i] && board[1][i]==board[2][i]){if(board[0][i] == 'X')winX++;else if(board[0][i] == 'O')winO++;}}if(board[0][0]==board[1][1] && board[1][1]==board[2][2]){ //对角线1if(board[0][0] == 'X')winX++;else if(board[0][0] == 'O')winO++;}if(board[2][0]==board[1][1] && board[1][1]==board[0][2]){ //对角线2if(board[2][0] == 'X')winX++;else if(board[2][0] == 'O')winO++;}if(X == O && winX)//先手赢,必有X == O+1return false;if(X != O && winO)//后手赢,必有X == Oreturn false;return winX+winO<=1 || (winX==2 && winO==0);// 最多一人赢  或者 先手有2个可以赢的情况}
};

0 ms 8.5 MB


我的CSDN博客地址 https://michael.blog.csdn.net/

长按或扫码关注我的公众号(Michael阿明),一起加油、一起学习进步!

LeetCode 794. 有效的井字游戏(分类讨论)相关推荐

  1. leetcode470 Java_Java实现 LeetCode 794 有效的井字游戏 (暴力分析)

    794. 有效的井字游戏 用字符串数组作为井字游戏的游戏板 board.当且仅当在井字游戏过程中,玩家有可能将字符放置成游戏板所显示的状态时,才返回 true. 该游戏板是一个 3 x 3 数组,由字 ...

  2. LeetCode - 794 - 有效的井字游戏 - java

    文章目录 题目要求 和 大意 代码 正常代码风格 简约风格(就是能省的符号,就省.能成一行的代码就写成一行) 正常风格代码的 讲解 题目要求 和 大意   代码 正常代码风格 class Soluti ...

  3. Leetcode动态规划部分典型题目分类及总结

    参考内容 https://leetcode-cn.com/problems/longest-palindromic-substring/solution/zhong-xin-kuo-san-dong- ...

  4. LC-1033. 移动石子直到连续(分类讨论)

    1033. 移动石子直到连续 难度中等50 三枚石子放置在数轴上,位置分别为 a,b,c. 每一回合,你可以从两端之一拿起一枚石子(位置最大或最小),并将其放入两端之间的任一空闲位置.形式上,假设这三 ...

  5. 每日一题---794. 有效的井字游戏[力扣][Go]

    题目描述 给你一个字符串数组 board 表示井字游戏的棋盘.当且仅当在井字游戏过程中,棋盘有可能达到 board 所显示的状态时,才返回 true . 井字游戏的棋盘是一个 3 x 3 数组,由字符 ...

  6. 分类讨论 ---- 2020 icpc 上海 Walker (二分 or 思维分类讨论)

    题目链接 题目大意: 就是两个人在坐标轴上面,有起始的坐标p1,p2p1,p2p1,p2,和速度v1,v2v1,v2v1,v2,问你访问完这长度为nnn的数轴最短时间是多少? 解题思路: 大佬有直接二 ...

  7. CF1471 D - Strange Definition(思维,分类讨论,lcm,gcd的性质,数论)

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 Codeforces Round #694 (Div. 2) D 很好的一道数论思维题 D - Str ...

  8. Unfair contest 模拟-分类讨论

    题意 : 两人比赛,n个裁判,给分范围[1,h][1, h][1,h],去掉s个最高分和t个最低分,给出n - 1个裁判的给分,第n个裁判想让第1个人赢,并且最小化给1的分数a[n]a[n]a[n] ...

  9. 2020ICPC(上海) - Walker(分类讨论+二分)

    题目链接:点击查看 题目大意:在长度为 n 的数轴上给出两个人的初始位置和速度,问使得每个位置至少被一个人走过的时间是多少 题目分析:分类讨论题目,分四种情况讨论即可,设 p1 < p2: p1 ...

最新文章

  1. 开启Sharepoint 2013站点邮箱
  2. 划分VLAN,根据每个VLAN通过DHCP分配IP地址
  3. RxSwift之深入解析核心逻辑Observable的底层原理
  4. 红黑树概念及其相关操作的实现
  5. del服务器如何收系统日志,利用Rsyslog集中收集系统日志和用户操作记录以及相关处理方法...
  6. Sysdig and Falco now powered by eBPF
  7. 学习node.js的一些笔记
  8. 超有意思的代码注释_程序员搞笑的代码注释:谁的代码注释我都不服,就服你的...
  9. 苹果Mac 3D 模型展开工具:Unfolder
  10. WinForm 圆形进度条CircularProgressBar
  11. 计算机自动化考试试题,计算机等级考试,办公自动化考试试题(一).doc
  12. lora网关采集温室大棚温湿度数据案例
  13. Linux-4.4-x86_64 内核配置选项简介
  14. 新的Steam控制器,ScummVM上的Sherlock Holmes以及更多开放游戏新闻
  15. 关于char[]类型的排序 和字符串在使用时可能char*更好用
  16. 读书笔记-精准努力-情绪暴躁因为假设世界是美好的
  17. 为什么上传速度比下载速度慢
  18. 【大数据面试题】(二)Hive 相关面试题总结
  19. 【ODX介绍】-3.1-ODX-D,ODX-F,ODX-C,ODX-V,ODX-M的XSD文件
  20. 国内用户访问国内服务器,国外用户访问国外服务器

热门文章

  1. mysql 日志_MySQL日志系统
  2. css的属性是变量是怎么表达,CSS自定义属性(变量)
  3. vb.net 窗体接收键盘事件_(十五)C#WinFrom自定义控件系列-键盘(二)
  4. python 生成式,迭代器,生成器
  5. JS_17 ES5,ES6
  6. java不规则算法_分布式id生成算法 snowflake 详解
  7. android 软件盘弹回去的最好体验,Android 软键盘弹出 日常填坑
  8. C++远航之封装篇——析构函数
  9. 结构体的一些形式理解
  10. Python第十七课(面向对象基础)