题目描述
给定一个二维数组board,代表棋盘,其中元素为1的代表是当前玩家的棋子,0表示没有棋子,-1代表是对方玩家的棋子。当一方棋子在横竖斜方向上有连成排的及获胜(及井字棋规则),返回当前玩家是否胜出。
测试样例:
[[1,0,1],[1,-1,-1],[1,-1,0]]
返回:true
题目分析
井字棋游戏规则,就是判断行、列以及对角线上的棋子是否全部相同
根据给定的二维数组,由于井字棋行和列相等,并且当前玩家的棋子为1, 只需计算某一行或者某一列的和为二维数组的行数,再判断两条对角线的和,如果有一个条件满足即玩家获胜。
在计算时,要注意每次统计每一行每一列,对角线的和时注意将sum置0,不然会被上次的计算结果干扰导致程序出错。
参考代码:
class Board {
public:
bool checkWon(vector > board) {
// write code here
int row = board.size();
int i, j, sum;
//行
for(i = 0; i < row; ++i)
{
sum = 0;
for(j = 0; j < row; ++j)
{
sum += board[i][j];
}
if(sum == row)
return true;
}
//列
for(i = 0; i < row; ++i)
{
sum = 0;
for(j = 0; j < row; ++j)
{
sum += board[j][i];
}
if(sum == row)
return true;
}
//对角线
sum = 0;
for(i = 0;i < row; ++i)
{
sum += board[i][i];
}
if(sum == row)
return true;
sum = 0;
for(i = 0; i < row; ++i)
{
sum += board[i][row-i-1];
}
if(sum == row)
return true;
return false;
}
};