【编程题】井字棋(Java实现)
题目来源
题目描述:
对于一个给定的井字棋棋盘,请设计一个高效算法判断当前玩家是否获胜。(类似于五子棋获胜(长度等于棋盘的长度则胜))
给定一个二维数组board,代表当前棋盘,其中元素为1的代表是当前玩家的棋子,为0表示没有棋子,为-1代表是对方玩家的棋子。
测试样例:
[[1,0,1],[1,-1,-1],[1,-1,0]]
返回:true
解答
方法一:计算行、列、对角、副对角和
时间复杂度O(n^2),空间复杂度O(1)
import java.util.*;
public class Board {
public boolean checkWon(int[][] board) {
// write code here
int len=board.length;
int[] sum=new int[4];
for(int i=0;i<len;i++){
if(sum[0]==len||sum[1]==len||sum[2]==len||sum[3]==len)return true;
sum[0]=0;
sum[1]=0;
sum[2]+=board[i][i];//正对角
sum[3]+=board[i][len-i-1];//副对角
for(int j=0;j<len;j++){
sum[0]+=board[i][j];//行
sum[1]+=board[j][i];//列
}
}
if(sum[0]==len||sum[1]==len||sum[2]==len||sum[3]==len)return true;
return false;
}
}