0%

面试题 16.04. 井字游戏

面试题 16.04. 井字游戏

需要知道一个事实

不可能两个同时胜利的,平局的情况只有2个都输

然后每一列的记录,用异或,bang

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
class Solution {
public:
string tictactoe(vector<string>& board) {
bool lxDiaX = false;
bool lxDiaO = false;
bool rxDiaX = false;
bool rxDiaO = false;
bool pending = false;
int n = board.size();
for(int i = 0; i < n; ++i)
{
bool rowX = false;
bool rowO = false;
bool colX = false;
bool colO = false;
if(!lxDiaO)
lxDiaO = 'O' ^ board[i][i];
if(!lxDiaX)
lxDiaX = 'X' ^ board[i][i];
if(!rxDiaO)
rxDiaO = 'O' ^ board[i][n - i - 1];
if(!rxDiaX)
rxDiaX = 'X' ^ board[i][n - i - 1];
for(int j = 0; j < n; ++j)
{
if(board[i][j] == ' ')
pending = true;
if(!rowX)
rowX = 'X' ^ board[i][j];
if(!rowO)
rowO = 'O' ^ board[i][j];
if(!colX)
colX = 'X' ^ board[j][i];
if(!colO)
colO = 'O' ^ board[j][i];
}
if(!rowX || !colX)
return "X";
if(!rowO || !colO)
return "O";
}
if(!lxDiaO || !rxDiaO)
return "O";
else if(!lxDiaX || !rxDiaX)
return "X";
else if(pending)
return "Pending";
return "Draw";
}
};