LeetCode-Design Tic-Tac-Toe
2016-08-11 12:36
447 查看
Design a Tic-tac-toe game that is played between two players on a n x n grid.
You may assume the following rules:
A move is guaranteed to be valid and is placed on an empty block.
Once a winning condition is reached, no more moves is allowed.
A player who succeeds in placing n of their marks in a horizontal, vertical, or diagonal row wins the game.
Example:
Follow up:
Could you do better than O(n2) per
Solution:
You may assume the following rules:
A move is guaranteed to be valid and is placed on an empty block.
Once a winning condition is reached, no more moves is allowed.
A player who succeeds in placing n of their marks in a horizontal, vertical, or diagonal row wins the game.
Example:
Given n = 3, assume that player 1 is "X" and player 2 is "O" in the board. TicTacToe toe = new TicTacToe(3); toe.move(0, 0, 1); -> Returns 0 (no one wins) |X| | | | | | | // Player 1 makes a move at (0, 0). | | | | toe.move(0, 2, 2); -> Returns 0 (no one wins) |X| |O| | | | | // Player 2 makes a move at (0, 2). | | | | toe.move(2, 2, 1); -> Returns 0 (no one wins) |X| |O| | | | | // Player 1 makes a move at (2, 2). | | |X| toe.move(1, 1, 2); -> Returns 0 (no one wins) |X| |O| | |O| | // Player 2 makes a move at (1, 1). | | |X| toe.move(2, 0, 1); -> Returns 0 (no one wins) |X| |O| | |O| | // Player 1 makes a move at (2, 0). |X| |X| toe.move(1, 0, 2); -> Returns 0 (no one wins) |X| |O| |O|O| | // Player 2 makes a move at (1, 0). |X| |X| toe.move(2, 1, 1); -> Returns 1 (player 1 wins) |X| |O| |O|O| | // Player 1 makes a move at (2, 1). |X|X|X|
Follow up:
Could you do better than O(n2) per
move()operation?
Solution:
public class TicTacToe { int[] rowCount; int[] colCount; int leftDiagCount, rightDiagCount; int winner; int num; /** Initialize your data structure here. */ public TicTacToe(int n) { num = n; rowCount = new int ; colCount = new int ; leftDiagCount = rightDiagCount = 0; winner = 0; } /** Player {player} makes a move at ({row}, {col}). @param row The row of the board. @param col The column of the board. @param player The player, can be either 1 or 2. @return The current winning condition, can be either: 0: No one wins. 1: Player 1 wins. 2: Player 2 wins. */ public int move(int row, int col, int player) { if (winner!=0) return winner; int delta = (player==1) ? 1 : -1; rowCount[row] += delta; colCount[col] += delta; if (row==col) leftDiagCount += delta; if (row+col == num-1) rightDiagCount += delta; if (Math.abs(rowCount[row]) == num || Math.abs(colCount[col])==num || Math.abs(leftDiagCount) == num || Math.abs(rightDiagCount) == num){ winner = player; } return winner; } } /** * Your TicTacToe object will be instantiated and called as such: * TicTacToe obj = new TicTacToe(n); * int param_1 = obj.move(row,col,player); */
相关文章推荐
- LeetCode "Design Tic-Tac-Toe"
- leetcode Design Tic-Tac-Toe
- [LeetCode] Design Tic-Tac-Toe 设计井字棋游戏
- LeetCode 348. Design Tic-Tac-Toe(井字棋)
- Leetcode 348. Design Tic-Tac-Toe
- Design Tic-Tac-Toe
- Design Tic-Tac-Toe
- [leetcode] 348. Design Tic-Tac-Toe 解题报告
- [Leetcode] 348. Design Tic-Tac-Toe 解题报告
- Design Tic-Tac-Toe
- Design Tic-Tac-Toe
- (未完成!)LeetCode 348. Design Tic-Tac-Toe 设计井字棋游戏
- [LeetCode] 348. Design Tic-Tac-Toe 设计井字棋游戏
- Codeforces Beta Round #3 C. Tic-tac-toe 模拟题
- tic-tac-toe游戏代码
- Java入门之tic-tac-toe
- C++alpha beta剪枝算法 实现4*4 tic-tac-toe
- 使用Python编写一个简单的tic-tac-toe游戏的教程
- 【Light OJ】No More Tic-tac-toe (博弈 SG函数)
- checkio (tic-tac-toe)