Saturday, March 3, 2018

LeetCode 794. Valid Tic-Tac-Toe State - Weekly Contest 74

https://leetcode.com/contest/weekly-contest-74/problems/valid-tic-tac-toe-state/




It's a simulation, just be patient and careful.

think of all the possibilities. Classified them. use | stand for the column strike, use - for the row strike.

use the \ and / for the diagonals.



class Solution {
boolean validTicTacToe(String[] A) {
// filter abnormal cases
if (A == null || A.length == 0) {
return false;
}
int XCount = 0;
int OCount = 0;
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
if (A[i].charAt(j) == 'X') {
XCount++;
} else if (A[i].charAt(j) == 'O') {
OCount++;
}
}
}
int XWinCount = 0;
int OWinCount = 0;
if (A[1].charAt(1) != ' ') {
if (A[1].charAt(1) == 'X') {
// * / \
if (A[2].charAt(0) == 'X' && A[0].charAt(2) == 'X') {
XWinCount++;
}
if (A[2].charAt(2) == 'X' && A[0].charAt(0) == 'X') {
XWinCount++;
}
// + - |
if (A[1].charAt(0) == 'X' && A[1].charAt(2) == 'X') {
XWinCount++;
}
if (A[2].charAt(1) == 'X' && A[0].charAt(1) == 'X') {
XWinCount++;
}
} else {
// * / \
if (A[2].charAt(0) == 'O' && A[0].charAt(2) == 'O') {
OWinCount++;
}
if (A[2].charAt(2) == 'O' && A[0].charAt(0) == 'O') {
OWinCount++;
}
// + - |
if (A[1].charAt(0) == 'O' && A[1].charAt(2) == 'O') {
OWinCount++;
}
if (A[2].charAt(1) == 'O' && A[0].charAt(1) == 'O') {
OWinCount++;
}
}
}
if (A[0].charAt(0) != ' ') {
if (A[0].charAt(0) == 'X') {
// | -
if (A[2].charAt(0) == 'X' && A[1].charAt(0) == 'X') {
XWinCount++;
}
if (A[0].charAt(1) == 'X' && A[0].charAt(2) == 'X') {
XWinCount++;
}
} else {
// | -
if (A[2].charAt(0) == 'O' && A[1].charAt(0) == 'O') {
OWinCount++;
}
if (A[0].charAt(1) == 'O' && A[0].charAt(2) == 'O') {
OWinCount++;
}
}
}
if (A[2].charAt(2) != ' ') {
if (A[2].charAt(2) == 'X') {
// | -
if (A[0].charAt(2) == 'X' && A[1].charAt(2) == 'X') {
XWinCount++;
}
if (A[2].charAt(0) == 'X' && A[2].charAt(1) == 'X') {
XWinCount++;
}
} else {
// | -
if (A[0].charAt(2) == 'O' && A[1].charAt(2) == 'O') {
OWinCount++;
}
if (A[2].charAt(0) == 'O' && A[2].charAt(1) == 'O') {
OWinCount++;
}
}
}
// System.out.println(XCount);
// System.out.println(OCount);
if (XCount != OCount && XCount != (OCount + 1)) {
return false;
}
if (XWinCount + OWinCount > 1) {
return false;
}
if (XWinCount == 1) {
return XCount == OCount + 1;
} else if (OWinCount == 1) {
return XCount == OCount;
}
return true;
}
}



No comments:

Post a Comment