設計一個算法,判斷玩家是否贏了井字游戲。輸入是一個 N x N 的數組棋盤,由字符" ",“X"和"O"組成,其中字符” "代表一個空位。
以下是井字游戲的規則:
玩家輪流將字符放入空位(" “)中。
第一個玩家總是放字符"O”,且第二個玩家總是放字符"X"。
"X"和"O"只允許放置在空位中,不允許對已放有字符的位置進行填充。
當有N個相同(且非空)的字符填充任何行、列或對角線時,游戲結束,對應該字符的玩家獲勝。
當所有位置非空時,也算為游戲結束。
如果游戲結束,玩家不允許再放置字符。
如果游戲存在獲勝者,就返回該游戲的獲勝者使用的字符(“X"或"O”);如果游戲以平局結束,則返回 “Draw”;如果仍會有行動(游戲未結束),則返回 “Pending”。
示例 1:
輸入: board = [“O X”," XO",“X O”]
輸出: “X”
代碼
class Solution {public String tictactoe(String[] board) {int n=board.length,blank=0;for(int i=0;i<n;i++){if(board[i].charAt(0)==' '){blank++;}boolean check=true;for(int j=1;j<n;j++)//檢查每一行if(board[i].charAt(j)==' '){blank++;check=false;break;}else if(board[i].charAt(j)!=board[i].charAt(0)){check=false;break;}if(check) return String.valueOf(board[i].charAt(0));if(board[0].charAt(i)==' ') {blank++;continue;}check=true;for(int j=1;j<n;j++)//檢查每一列if(board[j].charAt(i)==' '){blank++;check=false;break;}else if(board[j].charAt(i)!=board[0].charAt(i)){check=false;break;}if(check) return String.valueOf(board[0].charAt(i));}if(board[0].charAt(0)!=' '){boolean check=true;for(int i=1;i<n;i++)//檢查主對角線{if(board[i].charAt(i)!=board[0].charAt(0)){check=false;break;}}if(check) return String.valueOf(board[0].charAt(0));}if(board[0].charAt(n-1)!=' '){boolean check=true;for(int i=1;i<n;i++)//檢查副對角線{if(board[i].charAt(n-i-1)!=board[0].charAt(n-1)){check=false;break;}}if(check) return String.valueOf(board[0].charAt(n-1));}if(blank!=0) return "Pending";else return "Draw";//沒有空白的格子}
}