1. 题目

A 和 B 在一个 3 x 3 的网格上玩井字棋。

井字棋游戏的规则如下:

  • 玩家轮流将棋子放在空方格 (" ") 上。
  • 第一个玩家 A 总是用 “X” 作为棋子,而第二个玩家 B 总是用 “O” 作为棋子。
  • “X” 和 “O” 只能放在空方格中,而不能放在已经被占用的方格上。
  • 只要有 3 个相同的(非空)棋子排成一条直线(行、列、对角线)时,游戏结束。
  • 如果所有方块都放满棋子(不为空),游戏也会结束。
  • 游戏结束后,棋子无法再进行任何移动。

给你一个数组 moves,其中每个元素是大小为 2 的另一个数组(元素分别对应网格的行和列),它按照 A 和 B 的行动顺序(先 A 后 B)记录了两人各自的棋子位置。

如果游戏存在获胜者(A 或 B),就返回该游戏的获胜者;如果游戏以平局结束,则返回 “Draw”;如果仍会有行动(游戏未结束),则返回 “Pending”。

你可以假设 moves 都 有效(遵循井字棋规则),网格最初是空的,A 将先行动。

提示:
1 <= moves.length <= 9
moves[i].length == 2
0 <= moves[i][j] <= 2
moves 里没有重复的元素。
moves 遵循井字棋的规则。

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

2. 位运算解题

类似题目:
程序员面试金典 - 面试题 16.04. 井字游戏(计数)
LeetCode 348. 判定井字棋胜负(计数)

  • 将棋盘看做是9个二进制位,所有的获胜状态是可以枚举的,用3个8进制位来表示
class Solution {public:string tictactoe(vector<vector<int>>& moves) {vector<int> win = {0007,0070,0700,0444,0222,0111,0421,0124};int a = 0, b = 0, bit, i, j;bool flag = true;for(i = 0; i < moves.size(); i++) {   //将整个棋盘看做9个2进制位if(flag)//a先走{bit = moves[i][0]*3+moves[i][1];a |= (1<<bit);if(i >= 4)//走3步才可能赢{for(j = 0; j < 8; j++)if((a&win[j]) == win[j])return "A";//不能写 a == win[j],因为后面走的棋子多了,赢了 a 也肯定不会等于win[j]}}else{bit = moves[i][0]*3+moves[i][1];b |= (1<<bit);if(i >= 5)//走3步才可能赢{for(j = 0; j < 8; j++)if((b&win[j]) == win[j])return "B";}}flag = !flag;//换人下棋}if(moves.size() < 9)return "Pending";            return "Draw";}
};

LeetCode 1275. 找出井字棋的获胜者(位运算)相关推荐

  1. 『力扣刷题』5275_找出井字棋的获胜者 解题代码

    LeetCode-cn 力扣刷题 LeetCode-cn力扣刷题目录 165周赛 5275_找出井字棋的获胜者 * 5275. 找出井字棋的获胜者 显示英文描述* 用户通过次数0* 用户尝试次数0* ...

  2. T1275找出井字棋的获胜者+auto的用法

    题目:找出井字棋的获胜者 A 和 B 在一个 3 x 3 的网格上玩井字棋. 井字棋游戏的规则如下: 玩家轮流将棋子放在空方格 (" ") 上. 第一个玩家 A 总是用 " ...

  3. LeetCode简单题之找出井字棋的获胜者

    题目 A 和 B 在一个 3 x 3 的网格上玩井字棋. 井字棋游戏的规则如下: 玩家轮流将棋子放在空方格 (" ") 上. 第一个玩家 A 总是用 "X" 作 ...

  4. LeetCode-Python-1275. 找出井字棋的获胜者(模拟法)

    A 和 B 在一个 3 x 3 的网格上玩井字棋. 井字棋游戏的规则如下: 玩家轮流将棋子放在空方格 (" ") 上. 第一个玩家 A 总是用 "X" 作为棋子 ...

  5. python井字棋如何判断输赢_Python|找出井字棋的获胜者

    井字棋游戏的规则如下: 玩家轮流将棋子放在空方格 (" ") 上. 第一个玩家 A 总是用 "X" 作为棋子,而第二个玩家 B 总是用 "O" ...

  6. LeetCode 348. 判定井字棋胜负(计数)

    文章目录 1. 题目 2. 解题 1. 题目 请在 n × n 的棋盘上,实现一个判定井字棋(Tic-Tac-Toe)胜负的神器,判断每一次玩家落子后,是否有胜出的玩家. 在这个井字棋游戏中,会有 2 ...

  7. python井字棋ai,python 井字棋(Tic Tac Toe)

    说明 用python实现了井字棋,整个框架是本人自己构思的,自认为比较满意.另外,90%+的代码也是本人逐字逐句敲的. minimax算法还没完全理解,所以参考了这里的代码,并作了修改. 特点 可以选 ...

  8. C语言第十课:编写井字棋游戏(综合练习1)

    目录 前言: 一.文件建立: 1.头文件game.h: 2.函数定义文件game.c: 3.工程测试文件test.c: 二.编写井字棋游戏: 1.程序整体执行思路: 2.menu菜单函数实现: 3.g ...

  9. 井字棋LeetCode简单题

    给定一个二维数组board,代表棋盘,其中元素为1的代表是当前玩家的棋子,0表示没有棋子,-1代表是对方玩家的棋子.当一方棋子在横竖斜方向上有连成排的及获胜(及井字棋规则),返回当前玩家是否胜出. 测 ...

最新文章

  1. 前端必读:浏览器内部工作原理
  2. OpenGL生成的法线贴图并增加光照
  3. 壊小子的学习【日常阅读篇】(四)与阅读有关的那些事儿
  4. leetcode 878. Nth Magical Number | 878. 第N个神奇的数字(数学问题)
  5. 跟我一起学Redis之Redis配置文件啃了一遍之后,从尴尬变得有底气了(总结了一张思维图)...
  6. 使用Java将项目插入DynamoDB表
  7. 解决Linux新创建的文件夹带锁问题
  8. 【干货】2021年中国主要经济指标预测-中国科学院.pdf(附下载链接)
  9. oracle并发执行max,oracle max processes and sessions
  10. MySQL数据库几种常用的索引类型使用介绍
  11. Android UI系列-----Dialog对话框
  12. Windows常用密码的破解方法
  13. 超级高铁(Hyperloop)
  14. scrapy 搜索关键字_基于scrapy框架输入关键字爬取有关贴吧帖子
  15. 思科模拟器路由表怎么看_思科交换机查看路由表
  16. 如何快速实现告警短信的通知方式?
  17. 妇科癌症中的肠道菌群:病因、治疗潜力
  18. [Java]保留数值后2位的几种方法
  19. 车牌识别EasyPR--开发详解
  20. 综述论文要写英文摘要吗_关于小论文的一些撰写建议!

热门文章

  1. 选择排序 冒泡排序 二分查找
  2. linux 编译查看链接库详情,Linux环境下的编译,链接与库的使用
  3. 第一季3:HI3518E方案整体架构介绍(硬件和软件支持)
  4. C++远航之封装篇——类外定义和::
  5. POJ 3461Oulipo KMP模板
  6. 王译潇20162314 第九周作业总结
  7. 云计算三种服务模式SaaS、PaaS和IaaS及其之间关系(顺带CaaS、MaaS)
  8. centos 限制只能访问某个目录的php文件
  9. html中post和get区别
  10. STL中的map集合扩展字段比较方便