代码转自leetcode官方题库,作者:a_good_start
class Solution {
public String tictactoe(String[] board) {
boolean fill = true;//判断是否填满
boolean duijiao1 = board[0].charAt(0) == ' '?false:true;
boolean duijiao2 = board[0].charAt(board.length - 1) == ' '?false:true;//判断对角
boolean [] col = new boolean[board.length];//判断列
Arrays.fill(col,true);//初始化列为true
for(int j = 0;j < board.length;j++){
String s = board[j];
if(duijiao1 && s.charAt(j) != board[0].charAt(0)) duijiao1 = false;
if(duijiao2 && s.charAt(col.length - 1 - j) != board[0].charAt(col.length - 1)) duijiao2 = false;
boolean wid = true;
if(s.charAt(0) == ' ') wid = false;
for(int i = 0;i < s.length();i++){
if(fill && s.charAt(i)==' ') fill = false;//判断是否为满
if(wid && s.charAt(i) != s.charAt(0)) wid = false;//判断行是否满足
if(col[i] && s.charAt(i) != board[0].charAt(i)) col[i] = false;//判断列是否满足
}
if(wid) return "" + s.charAt(0);
}
if(duijiao1) return "" +board[0].charAt(0);
if(duijiao2) return "" + board[0].charAt(col.length - 1);
for(int i = 0;i < col.length;i++) if(col[i] && board[0].charAt(i) !=' ') return "" + board[0].charAt(i);
return fill?"Draw":"Pending";
}
思路:fill判断是否填满,依次判断对角线,列行,上的元素是否一致,只要任意一个一致,那么即可找出答案。