程序员面试金典——17.2井字棋
参考网址:https://www.nowcoder.com/profile/9374962/codeBookDetail?submissionId=16441975
啥是井字棋?怎么着算赢??
看完答案后发现:任意行、列、主对角线或副对角线全部是我方旗子便能获胜啊~
Solution1:针对3*3棋盘的算法
class Board {
public:
bool checkWon(vector<vector<int> > board) {
// write code here
if (board[0][0] + board[1][1] + board[2][2] == 3) return true;
if (board[0][2] + board[1][1] + board[2][0] == 3) return true;
for (int i = 0; i < 3; i++) {
if (board[i][0] + board[i][1] + board[i][2] == 3) return true;
if (board[0][i] + board[1][i] + board[2][i] == 3) return true;
}
return false;
}
};
Solution2:针对n*n棋盘的算法
class Board {
public:
bool checkWon(vector<vector<int> > board) {
// write code here
int len = board.size();
//检查行
for (int i = 0; i < len; i++) {
int sum = 0;
for (int j = 0; j < len; j++)
sum += board[i][j];
if(sum == len)
return true;
}
//检查列
for (int i = 0; i < len; i++) {
int sum = 0;
for (int j = 0; j < len; j++)
sum += board[j][i];
if(sum == len)
return true;
}
//检查主对角线
int temp = 0;
for (int i = 0; i < len; i++) {
temp += board[i][i];
}
if (temp == len) return true;
//检查副对角线
temp = 0;
for (int i = 0; i < len; i++) {
temp += board[i][len-i-1];
}
if (temp == len) return true;
return false;
}
};