Problem
N*N matrix is given with input red or black.You can move horizontally, vertically or diagonally. If 3 consecutive samecolor found, that color will get 1 point. So if 4 red are vertically then pointis 2. Find the winner.
Solution
注意检查左上到右下, 右上到左下
1 public static boolean ticTacToe(boolean[][] board) { 2 if(board == null || board.length == 0) return false; 3 4 int m = board.length; 5 int n = board[0].length; 6 7 int red = 0, black = 0; 8 for(int i=0; i<m; i++) { 9 for(int j=0; j<n; j++) { 10 if(board[i][j]) { 11 if(i<m-2 && board[i+1][j] && board[i+2][j]) red++; //check vertical 12 if(j<n-2 && board[i][j+1] && board[i][j+2]) red++; //check horizontal 13 if(i<m-2 && j<n-2 && board[i+1][j+1] && board[i+2][j+2]) red++; //check diag 14 } 15 else { 16 if(i<m-2 && !board[i+1][j] && !board[i+2][j]) black++; //check vertical 17 if(j<n-2 && !board[i][j+1] && !board[i][j+2]) black++; //check horizontal 18 if(i<m-2 && j<n-2 && !board[i+1][j+1] && !board[i+2][j+2]) black++; //check diag 19 } 20 } 21 } 22 23 for(int i=m-1; i>=0; i--) { 24 for(int j=n-1; j>=0; j--) { 25 if(board[i][j]) { 26 if(i>=2 && j>=2 && board[i-1][j-1] && board[i-2][j-2]) red++; //check reverse diag 27 } 28 else { 29 if(i>=2 && j>=2 && !board[i-1][j-1] && !board[i-2][j-2]) black++; //check reverse diag 30 } 31 } 32 } 33 34 return red > black; 35 }