题目来源
牛客网
链接:井字棋
题目描述
给定一个二维数组board,代表棋盘,其中元素为1的代表是当前玩家的棋子,0表示没有棋子,-1代表是对方玩家的棋子。当一方棋子在横竖斜方向上有连成排的及获胜(及井字棋规则),返回当前玩家是否胜出。
测试用例:
[[1,0,1],[1,-1,-1],[1,-1,0]]
返回:true
解题思路
井字棋有四种情况表示当前玩家获胜,1代表当前玩家棋子
- 行全为1, 即行的和为3
- 列全为1,即列的和为3
- 主对角全为1, 即主对角和为3
- 副对角全为1,即副对角和为3
如果扩展为N*N的话,判断和是否等于N
代码展示
以下代码适用于任何情况
class Board {
public:
bool checkWon(vector<vector<int> > board)
{
int i, j;
for(i = 0; i < board.size(); i++)
{
for(j = 0; j < 3; j++)
if(board[i][j] != 1)
break;
if(j == board.size())
return true;
}
for(j = 0; j < board.size(); j++)
{
for(i = 0; i < 3; i++)
if(board[i][j] != 1)
break;
if(i == board.size())
return true;
}
for(i = 0; i < board.size(); i++)
{
if(board[i][i] != 1)
break;
if(i == board.size() - 1)
return true;
}
for(i = 0; i < board.size(); i++)
{
if(board[i][board.size() - i - 1] != 1)
break;
if(i == board.size() - 1)
return true;
}
return false;
}
};