794. 有效的井字游戏

用字符串数组作为井字游戏的游戏板 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”} 中的一个字符。

  1. class Solution {
  2. public boolean validTicTacToe(String[] board) {
  3. int countX = 0;
  4. int countO = 0;
  5. char[][] chars = new char[3][3];
  6. chars[0] = board[0].toCharArray();
  7. chars[1] = board[1].toCharArray();
  8. chars[2] = board[2].toCharArray();
  9. for (char[] ca : chars) {
  10. for (char c : ca) {
  11. if (c == 'X') {
  12. countX++;
  13. }
  14. if (c == 'O') {
  15. countO++;
  16. }
  17. }
  18. }
  19. if (countO > countX || countX - countO > 1) {
  20. return false;
  21. }
  22. //相等的时候说明最后一步是0走的,X不可能赢
  23. if (countX == countO && hasSuccess(chars, 'X')) {
  24. return false;
  25. }
  26. //大于1的时候说明最后一步是X走的,0不可能赢
  27. if (countX - countO == 1 && hasSuccess(chars, 'O')) {
  28. return false;
  29. }
  30. return true;
  31. }
  32. private boolean hasSuccess(char[][] chars, char c) {
  33. //横着三排
  34. if (chars[0][0] == c && chars[0][1] == c && chars[0][2] == c) {
  35. return true;
  36. }
  37. if (chars[1][0] == c && chars[1][1] == c && chars[1][2] == c) {
  38. return true;
  39. }
  40. if (chars[1][0] == c && chars[2][1] == c && chars[2][2] == c) {
  41. return true;
  42. }
  43. //竖着三排
  44. if (chars[0][0] == c && chars[1][0] == c && chars[2][0] == c) {
  45. return true;
  46. }
  47. if (chars[0][1] == c && chars[1][1] == c && chars[2][1] == c) {
  48. return true;
  49. }
  50. if (chars[0][2] == c && chars[1][2] == c && chars[2][2] == c) {
  51. return true;
  52. }
  53. //斜着两个
  54. if (chars[0][0] == c && chars[1][1] == c && chars[2][2] == c) {
  55. return true;
  56. }
  57. if (chars[0][2] == c && chars[1][1] == c && chars[2][0] == c) {
  58. return true;
  59. }
  60. return false;
  61. }
  62. }

Java实现 LeetCode 794 有效的井字游戏 (暴力分析)的更多相关文章

  1. Java实现 LeetCode 816 模糊坐标(暴力)

    816. 模糊坐标 我们有一些二维坐标,如 "(1, 3)" 或 "(2, 0.5)",然后我们移除所有逗号,小数点和空格,得到一个字符串S.返回所有可能的原始 ...

  2. Java实现 LeetCode 836 矩形重叠(暴力)

    836. 矩形重叠 矩形以列表 [x1, y1, x2, y2] 的形式表示,其中 (x1, y1) 为左下角的坐标,(x2, y2) 是右上角的坐标. 如果相交的面积为正,则称两矩形重叠.需要明确的 ...

  3. Java实现 LeetCode 835 图像重叠(暴力)

    835. 图像重叠 给出两个图像 A 和 B ,A 和 B 为大小相同的二维正方形矩阵.(并且为二进制矩阵,只包含0和1). 我们转换其中一个图像,向左,右,上,或下滑动任何数量的单位,并把它放在另一 ...

  4. Java实现 LeetCode 824 山羊拉丁文(暴力)

    824. 山羊拉丁文 给定一个由空格分割单词的句子 S.每个单词只包含大写或小写字母. 我们要将句子转换为 "Goat Latin"(一种类似于 猪拉丁文 - Pig Latin ...

  5. Java实现 LeetCode 817 链表组件(暴力)

    817. 链表组件 给定一个链表(链表结点包含一个整型值)的头结点 head. 同时给定列表 G,该列表是上述链表中整型值的一个子集. 返回列表 G 中组件的个数,这里对组件的定义为:链表中一段最长连 ...

  6. Java实现 LeetCode 808 分汤 (暴力模拟)

    808. 分汤 有 A 和 B 两种类型的汤.一开始每种类型的汤有 N 毫升.有四种分配操作: 提供 100ml 的汤A 和 0ml 的汤B. 提供 75ml 的汤A 和 25ml 的汤B. 提供 5 ...

  7. Java实现 LeetCode 799 香槟塔 (暴力模拟)

    799. 香槟塔 我们把玻璃杯摆成金字塔的形状,其中第一层有1个玻璃杯,第二层有2个,依次类推到第100层,每个玻璃杯(250ml)将盛有香槟. 从顶层的第一个玻璃杯开始倾倒一些香槟,当顶层的杯子满了 ...

  8. Java实现 LeetCode 788 旋转数字(暴力)

    788. 旋转数字 我们称一个数 X 为好数, 如果它的每位数字逐个地被旋转 180 度后,我们仍可以得到一个有效的,且和 X 不同的数.要求每位数字都要被旋转. 如果一个数的每位数字被旋转以后仍然还 ...

  9. Java实现 LeetCode 739 每日温度(暴力循环)

    739. 每日温度 根据每日 气温 列表,请重新生成一个列表,对应位置的输出是需要再等待多久温度才会升高超过该日的天数.如果之后都不会升高,请在该位置用 0 来代替. 例如,给定一个列表 temper ...

随机推荐

  1. Boosting算法总结(ada boosting、GBDT、XGBoost)

    把之前学习xgb过程中查找的资料整理分享出来,方便有需要的朋友查看,求大家点赞支持,哈哈哈 作者:tangg, qq:577305810 一.Boosting算法 boosting算法有许多种具体算法 ...

  2. 在Qsys中创建用户自定义IP

    在SOC FPGA的设计中,必须使用Qsys软件才能将ARM和FPGA之间的接口引入到FPGA设计中.为了设计上的方便,客户经常希望将Qsys中的一些接口信号引入到FPGA顶层设计文件中.本文以Ava ...

  3. Java中Error和Exception的异同以及运行时异常(Runtime exception)与检查型异常(checked exception)的区别

    一:Error和Exception的基本概念: 首先Exception和Error都是继承于Throwable 类,在 Java 中只有 Throwable 类型的实例才可以被抛出(throw)或者捕 ...

  4. Windows 10 IoT Core用PWM控制器控制树莓派LED灯亮度

    我接到一个需求,需要调节LED灯的亮度,且是从上位机进行控制,我了解到树莓派也有PWM,就准备通过PWM来控制灯的亮度. PWM又叫脉宽调制,是用微处理器的数字输出来对模拟电路进行控制,对模拟信号电平 ...

  5. java8 新特性Stream流的应用

    作为一个合格的程序员,如何让代码更简洁明了,提升编码速度尼. 今天跟着我一起来学习下java 8  stream 流的应用吧. 废话不多说,直入正题. 考虑以下业务场景,有四个人员信息,我们需要根据性 ...

  6. 攻防世界-web-高手进阶区018-easytornado

    1.查看主页面 2.查看其他页面,/welcome.txt http://111.198.29.45:39004/file?filename=/welcome.txt&filehash=9ae ...

  7. PMS学习

    一,PMS的adb相关重要指令 1,adb shell dumpsys package(dump所有的系统内apk信息) 2,adb shell dumpsys package “com.androi ...

  8. vue element-ui el-form-item 循环渲染,验证表单内容

    data里面如下图:

  9. 微信小程序canvas canvasGetImageData方法真机获得数据显示到image为空白

    方法 wx.canvasGetImageData的参数 width,height 只能是整数

  10. React:Composition

    在日常的UI构建中,经常会遇到一种情况:组件本身更多是作为一个容器,它所包含的内容可能是动态的.未预先定义的.这时候它的内容取决另一个组件或外部的输入.比如弹层. props.children: Re ...