井字棋 二维数组java_LeetCode 面试题 16.04. 井字游戏 Java

1a11db005d5d2cadf941f5cc3e066cce.png

一看到井字棋游戏最先想到决策树,这个题是直接判断输赢。注意不是9个格子,是N*N个格子。那么第一步应该把一维数组放到二维数组中,否则无法遍历。

遇到X,转换成1。遇到O,转换成-1。否则为0

遍历二维数组的每一行,每一列,两条对角线。如果和为N,则输出"X",和为-N,则输出"O"。遍历时需要保存0的数量,用于判断还有没有空位。flag表示有无胜利者。

class Solution {

public String tictactoe(String[] board) {

int n = board.length;

int ox[][] = new int[n][n];

for(int i=0;i

for(int j=0;j

if(board[i].charAt(j) == 'X'){

ox[i][j] = 1;

}else if(board[i].charAt(j) == 'O'){

ox[i][j] = -1;

}else{

ox[i][j] = 0;

}

}

}

return win(ox);

}

public String win(int nums[][]){

int n=nums.length;

int rowsum=0,colsum=0,zeronum=0,diagonal1=0,diagonal2=0;

boolean flag=false;

for(int i=0;i

rowsum=0;

for(int j=0;j

if(nums[i][j]==0){

zeronum++;

}

rowsum+=nums[i][j];

if(i==j){

diagonal1+=nums[i][j];

}

}

if(rowsum==n){

flag=true;

return "X";

}

if(rowsum==-n){

flag=true;

return "O";

}

}

if(diagonal1==n){

flag=true;

return "X";

}

if(diagonal1==-n){

flag=true;

return "O";

}

for(int j=0;j

colsum=0;

for(int i=0;i

colsum+=nums[i][j];

if(i+j==n-1){

diagonal2+=nums[i][j];

}

}

if(colsum==n){

flag=true;

return "X";

}

if(colsum==-n){

flag=true;

return "O";

}

}

if(diagonal2==n){

flag=true;

return "X";

}

if(diagonal2==-n){

flag=true;

return "O";

}

if(!flag){

if(zeronum==0){

return "Draw";

}else{

return "Pending";

}

}

return null;

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值