LeetCode1275.找出井字棋的获胜者

题目链接:

1275. 找出井字棋的获胜者 - 力扣(LeetCode)

分析:这个题也属于普通的模拟题,说实话感觉自己做的比较笨拙,就是老实模拟下棋的过程,仅供大家参考,热烈欢迎有大佬能给点拨一下更好的思路。

算法思路:先对下棋的序列进行一个基本的判断,如果少于5步,那说明游戏一定还需要继续。这是第一种边界情况,大家一定要考虑。

接下来开辟一个3*3的数组v,表示井字棋的棋盘,我们遍历整个题目给出的数组来模拟下棋的过程,因为是A B轮换下棋,所以我们可以通过下棋时的奇偶来判断这一步该由谁来下。按顺序模拟结束整个下棋过程即可。为了方便理解,我们不使用题目中的X、O,反而使用1,-1来分别代表A、B的下棋结果,这样也方便对后续的统计。

接下来需要整理棋盘,判断是否由获胜者,这里用了不高明的办法--挨个计算。定义了八个int值,表明所有可能出现的结果,然后依次进行计算(这一部分在代码给出了)。计算结束后,如果结果中出现了3,说明A胜出了;如果出现了-3说明B胜出了。如果都没有,那么我们需要进一步判断一共走了多少步,如果已经9步,说明已经无路可走,返回平局,否则返回游戏尚未结束。

这个过程稍微有点抽象,希望大家细心理解。

下面是参考代码:

cpp 复制代码
class Solution {
public:
    string tictactoe(vector<vector<int>>& moves) {
        if(moves.size()<=4)//如果一共没有走过4步 说明游戏一定没有结束 直接返回Pending
            return "Pending";
        vector<vector<int>>v(3,vector<int>(3,0));//定义一个3*3的数组模拟井字棋棋盘
        for(int i=0;i<moves.size();++i){//遍历下棋的所有步骤
            if(i%2==0){//A下棋
                v[moves[i][0]][moves[i][1]]=1;//A下的棋落到了这个位置
            }else{//B下棋
                v[moves[i][0]][moves[i][1]]=-1;//B的棋落到了这个位置
            }
        }
        //用8个字母代表了所有可能的和
        int a=v[0][0]+v[0][1]+v[0][2];//第一行的和
        int b=v[1][0]+v[1][1]+v[1][2];//第二行的和
        int c=v[2][0]+v[2][1]+v[2][2];//第三行的和
        int d=v[0][0]+v[1][0]+v[2][0];//第一列的和
        int e=v[0][1]+v[1][1]+v[2][1];//第二列的和
        int f=v[0][2]+v[1][2]+v[2][2];//第三列的和
        int g=v[0][0]+v[1][1]+v[2][2];//主对角线的和
        int h=v[0][2]+v[1][1]+v[2][0];//副对角线的和
        if(a==3||b==3||c==3||d==3||e==3||f==3||g==3||h==3)//A获胜的情况一定在这其中
            return "A";
        if(a==-3||b==-3||c==-3||d==-3||e==-3||f==-3||g==3||h==-3)//B获胜的情况一定在这其中
            return "B";
        if(moves.size()==9)//若两人都没有获胜且走了9步 那么就是平局
            return "Draw";
        return "Pending";//否则游戏仍然没有结束
    }
};
相关推荐
袋鼠云数栈20 小时前
集团数字化统战实战:统一数据门户与全业态监管体系构建
大数据·数据结构·人工智能·多模态
小月球~20 小时前
天梯赛 · 并查集
数据结构·算法
仍然.21 小时前
算法题目---模拟
java·javascript·算法
6Hzlia1 天前
【Hot 100 刷题计划】 LeetCode 118. 杨辉三角 | C++ 动态规划题解
c++·leetcode·动态规划
三道渊1 天前
C语言:文件I/O
c语言·开发语言·数据结构·c++
kali-Myon1 天前
CTFshow-Pwn142-Off-by-One(堆块重叠)
c语言·数据结构·安全·gdb·pwn·ctf·
潇冉沐晴1 天前
DP——背包DP
算法·背包dp
GIOTTO情1 天前
2026 世界互联网大会亚太峰会|AI 时代媒介投放的技术实战与算法优化
人工智能·算法
逆境不可逃1 天前
LeetCode 热题 100 之 543. 二叉树的直径 102. 二叉树的层序遍历 108. 将有序数组转换为二叉搜索树 98. 验证二叉搜索树
算法·leetcode·职场和发展
计算机安禾1 天前
【数据结构与算法】第19篇:树与二叉树的基础概念
c语言·开发语言·数据结构·c++·算法·visual studio code·visual studio