【刷题笔记】——day.6 有效的井字游戏

学习目标:

用于记录每日刷的题目为了明年的python组蓝桥杯做准备,今天是打卡的第六天,冲!


 原题:有效的井字游戏

题目描述:

给你一个字符串数组 board 表示井字游戏的棋盘。当且仅当在井字游戏过程中,棋盘有可能达到 board 所显示的状态时,才返回 true 。

井字游戏的棋盘是一个 3 x 3 数组,由字符 ' ''X' 和 'O' 组成。字符 ' ' 代表一个空位。

以下是井字游戏的规则:

玩家轮流将字符放入空位(' ')中。
1.玩家 1 总是放字符 'X' ,而玩家 2 总是放字符 'O' 。
2.'X' 和 'O' 只允许放置在空位中,不允许对已放有字符的位置进行填充。
3.当有 3 个相同(且非空)的字符填充任何行、列或对角线时,游戏结束。
4.当所有位置非空时,也算为游戏结束。
5.如果游戏结束,玩家不允许再放置字符。

 示例一:

输入:board = ["O    ","     ","     "]
输出:false
解释:玩家 1 总是放字符 "X" 。

示例二: 

输入:board = ["XOX","  X  ","     "]
输出:false
解释:玩家应该轮流放字符。

示例三: 

输入:board = ["XXX","OXO","XOO"]
输出:true


 题解:

思路(分类讨论):

1.题目要求棋盘是否能有效,那么首先要分析游戏的规则。‘X’是先手放置的,那么就可以说明‘X’的棋子个数要不就是和‘O’数量相同,要不就是比‘O’棋子多一个。那么我们就分这两类情况去讨论。

2.如果‘X’棋子与‘O’棋子数相同,那么最后落的子是‘O’棋子。所以不存在‘X’三连的情况,所以只要‘O’棋子连成三连的条数小于 2 就成立(等与2的情况是落最后一个子时恰好连成两个三连)

3.如果'X'棋子比‘O’棋子多一个,那么最后落的子是‘X’棋子。所以不存在‘O’三连的情况,所以只要‘X’连线数比2小就成立

代码实现(Python): 

class Solution:
    def validTicTacToe(self, board):
        def win(n,board):  #查找有几个三连
            flag = 0
            for i in board:  #横向判断三连
                if i == n+n+n:
                    flag+=1
            for i in range(3):  #纵向判断三连数
                if board[0][i] == n and board[1][i] == n and n == board[2][i]:
                    flag+=1
            if board[0][0] == n and board[1][1] == n and board[2][2] == n:  #正对角线判断
                flag += 1
            if board[0][2] == n and board[1][1] == n and board[2][0] == n:  #反对角线判断
                flag += 1
            return flag
        count_X = 0
        count_O = 0
        for i in board:   #对X和O计数
            for j in i: 
                if j == 'X':
                    count_X += 1
                elif j == 'O':
                    count_O += 1
        if count_O == count_X -1:   #如果X比O数量多一个
            if win('X',board) <= 2 and win('O',board) == 0:
                return True
            else:
                return False
        elif  count_X == count_O:   #如果X和O数量相同
            if win('X',board) == 0 and win('O',board) <= 2:
                return True
            else:
                return False
        else:    #数量既不相同,X数量也不比O大一,不存在这种情况
            return False

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
THE END
分享
二维码
< <上一篇

)">
下一篇>>