Find Winner on a Tic Tac Toe Game
给一个数组是一些moves, 求三连游戏的胜者。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 |
class Solution { public String tictactoe(int[][] moves) { int[][] g = new int[3][3]; int cc = 0; for(int[] m : moves){ if(cc % 2 == 0) g[m[0]][m[1]] = 1; else g[m[0]][m[1]] = -100; cc++; } for(int i = 0; i < 3; i++){ for(int j = 0; j < 3; j++) { int r = checkRow(g, j); int c = checkCol(g, i); int d = checkDia(g, i, j); int dd = checkDDia(g, i, j); if(r == 3) return "A"; if(r == -300) return "B"; if(c == 3) return "A"; if(c == -300) return "B"; if(d == 3) return "A"; if(d == -300) return "B"; if(dd == 3) return "A"; if(dd == -300) return "B"; } } return cc == 9 ? "Draw" : "Pending"; } private int checkRow(int[][] g, int j) { int res = 0; for(int i = 0; i < 3; i++){ res += g[i][j]; } return res; } private int checkCol(int[][] g, int i) { int res = 0; for(int j = 0; j < 3; j++){ res += g[i][j]; } return res; } private int checkDia(int[][] g, int i, int j) { if(i != 1 || j != 1) return 0; int res = 0; for(int k = 0; k < 3; k++){ res += g[k][k]; } return res; } private int checkDDia(int[][]g, int i, int j){ if(i != 1 || j != 1) return 0; int res = 0; i = 0; j = 2; for(int k = 0; k < 3; k++){ res += g[i++][j--]; } return res; } } |