LeetCode 794. Valid Tic-Tac-Toe State

题目描述:



代码如下:

class Solution {
public:
    bool validTicTacToe(vector<string>& board) {
        int x = 0, o = 0;  //X与O的数目
        for(int i = 0; i < 3; i++){
            for(int j = 0; j < 3; j++){
                if(board[i][j] == 'X') x++;
                if(board[i][j] == 'O') o++;
            }
        }
        if(x < o || x-o > 1) return false;  //X先行,x大于等于o,且差值不超过1
        if(x <= 2) return true;   //没有连成线的可能,不用进行之后的判断,直接返回
        int xl = 0, ol = 0;
        for(int i = 0; i < 3; i++){  //检查横竖的连线情况
            if(board[i][0] == board[i][1] && board[i][1] == board[i][2]){
                if(board[i][0] == 'X') xl++;
                if(board[i][0] == 'O') ol++;
            }
            if(board[0][i] == board[1][i] && board[1][i] == board[2][i]){
                if(board[0][i] == 'X') xl++;
                if(board[0][i] == 'O') ol++;
            }   
        }
        //检查对角的连线情况
        if(board[0][0] == board[1][1] && board[1][1] == board[2][2]){
                if(board[0][0] == 'X') xl++;
                if(board[0][0] == 'O') ol++;
        }
        if(board[0][2] == board[1][1] && board[1][1] == board[2][0]){
                if(board[0][2] == 'X') xl++;
                if(board[0][2] == 'O') ol++;
        }
        if(xl > 1 || ol > 1 || (xl&&ol)) return false;  //有1条以上连线,错误
        if(xl == 1 && x == o) return false;    //X先连成线,O未及时停止,错误
        if(ol == 1 && x > o) return false;     //O先连成线,X未及时停止,错误
        return true;
    }
};


个人体会:

       题目看了小半天才理解,也没有想出什么好方法,只是一步步排除错误情况。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值