[数组]leetcode1275:找出井字棋的获胜者(easy)

本文介绍了一种通过暴力枚举方法判断井字棋游戏胜负的算法。算法通过检查所有可能的胜利组合(三行、三列、两条对角线),来确定游戏是否已分出胜负,以及胜者是谁。如果所有位置都被填满但没有一方获胜,则宣布平局。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目:

1275. 找出井字棋的获胜者

题解:

  • 思路:暴力枚举(说实话我是笨蛋,再打比赛的时候这种小数据的枚举题都没做好,我是笨蛋)
  • 获胜的方式也就总共8种:三行、三列、两条对角线。
  • 然后把moves当成一维数组使用,注意二维数组与一维数组的转换(每行的个数*i+j)

代码如下:

class Solution {
public:
    string tictactoe(vector<vector<int>>& moves) {
        vector<int> playerA(9,0),playerB(9,0);
        for(int i=0;i<moves.size();++i){
            if(i%2==0){
                playerA[moves[i][0]*3+moves[i][1]]=1;
                if(check(playerA))
                return "A";
            }
            else{
                playerB[moves[i][0]*3+moves[i][1]]=1;
                if(check(playerB))
                return "B";
            }
        }
        if(moves.size()>=9)return "Draw";//平局
        else return "Pending";//游戏还没结束
    }

    bool check(vector<int>& grid){
        //判断行
        for(int i=0;i<3;++i){
            if(grid[i*3]&&grid[i*3+1]&&grid[i*3+2])
                return true;
        }
        //判断列
        for(int i=0;i<3;++i){
            if(grid[i]&&grid[i+3]&&grid[i+6])
                return true;
        }
        //判断对角线
        if(grid[0]&&grid[4]&&grid[8])return true;
        if(grid[2]&&grid[4]&&grid[6])return true;
        return false;
    }
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值