题意:

image.png

解题思路:

  1. 思路:
  2. 1. 先遍历行,再遍历列,最后遍历3*3方块;
  3. 2. 使用字典存储,遍历到对应的行列再判断字典是否包含该数字;
  4. 3. 方块的判断:
  5. $x = 3 * floor($i / 3) + floor($j / 3);
  6. $y = 3 * floor($i % 3) + floor($j % 3);
  7. 比如:i = 3, j = 4 => [3,4]=>[4,1] => 表示i,j=[3,4]位于第4box的第一个小格子

PHP代码实现:

  1. class Solution {
  2. function isValidSudoku($board) {
  3. $row = count($board);
  4. $col = count($board[0]);
  5. for ($i = 0; $i < $row; $i++) {
  6. $rows = [];
  7. $cols = [];
  8. $cube = [];
  9. for ($j = 0; $j < $col; $j++) {
  10. if ($board[$i][$j] != '.' && in_array($board[$i][$j], $rows)) {
  11. return false;
  12. } else {
  13. array_push($rows, $board[$i][$j]);
  14. }
  15. if ($board[$j][$i] != '.' && in_array($board[$j][$i], $cols)) {
  16. return false;
  17. } else {
  18. array_push($cols, $board[$j][$i]);
  19. }
  20. $x = 3 * floor($i / 3) + floor($j / 3);
  21. $y = 3 * floor($i % 3) + floor($j % 3);
  22. if ($board[$x][$y] != '.' && in_array($board[$x][$y], $cube)) {
  23. return false;
  24. } else {
  25. array_push($cube, $board[$x][$y]);
  26. }
  27. }
  28. }
  29. return true;
  30. }
  31. }

GO代码实现:

  1. func isValidSudoku(board [][]byte) bool {
  2. for i := 0; i < 9; i++ {
  3. rows := map[byte]bool{}
  4. cols := map[byte]bool{}
  5. cube := map[byte]bool{}
  6. for j := 0; j < 9; j++ {
  7. if board[i][j] != '.' && rows[board[i][j]] {
  8. return false
  9. } else {
  10. rows[board[i][j]] = true
  11. }
  12. if board[j][i] != '.' && cols[board[j][i]] {
  13. return false;
  14. } else {
  15. cols[board[j][i]] = true
  16. }
  17. x := 3 * (i / 3) + j / 3
  18. y := 3 * (i % 3) + j % 3
  19. if board[x][y] != '.' && cube[board[x][y]] {
  20. return false;
  21. } else {
  22. cube[board[x][y]] = true
  23. }
  24. }
  25. }
  26. return true
  27. }