Guest User

Untitled

a guest
Jul 21st, 2018
74
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.32 KB | None | 0 0
  1. //DFS solution: scan for adjacent mines, if not, then call recursive function on 8 adjacent square
  2. //Time: O(m * n), 4ms
  3. //Space: O(m + n)
  4. class Solution {
  5. public char[][] updateBoard(char[][] board, int[] click) {
  6. if(board[click[0]][click[1]] == 'M') {
  7. board[click[0]][click[1]] = 'X';
  8. return board;
  9. }
  10. //The click position is an empty place
  11. DFS(board, click[0], click[1]);
  12. return board;
  13. }
  14.  
  15. private void DFS(char[][] board, int r, int c) {
  16. //Base case: out of range or visited
  17. if(r < 0 || r >= board.length || c < 0 || c >= board[0].length || (board[r][c] != 'E' && board[r][c] != 'M')) {
  18. return;
  19. }
  20. int ans = 0;
  21. int[][] ardArr = new int[][]{{1, 1}, {1, 0}, {1, -1}, {0, 1}, {0, -1}, {-1, 1}, {-1, 0}, {-1, -1}};
  22. for(int[] ard : ardArr) {
  23. if(r + ard[0] >= 0 && r + ard[0] < board.length &&
  24. c + ard[1] >= 0 && c + ard[1] < board[0].length &&
  25. board[r + ard[0]][c + ard[1]] == 'M') {
  26. ans++;
  27. }
  28. }
  29. if(ans == 0) {
  30. board[r][c] = 'B';
  31. for(int[] ard : ardArr) {
  32. DFS(board, r + ard[0], c + ard[1]);
  33. }
  34. } else {
  35. board[r][c] = (char)('0' + ans);
  36. }
  37. }
  38. }
Add Comment
Please, Sign In to add comment