zoukankan      html  css  js  c++  java
  • 36. Valid Sudoku 有效的数独

    Determine if a Sudoku is valid, according to: Sudoku Puzzles - The Rules.

    The Sudoku board could be partially filled, where empty cells are filled with the character '.'.


    A partially filled sudoku which is valid.

    Note:
    A valid Sudoku board (partially filled) is not necessarily solvable. Only the filled cells need to be validated. 


    验证当前九宫格盘面是否有错误

    1. class Solution:
    2. def valid3by3(self, board, row, col):
    3. validPos = [
    4. [-1, -1], [-1, 0], [-1, 1],
    5. [0, -1], [0, 0], [0, 1],
    6. [1, -1], [1, 0], [1, 1]
    7. ]
    8. s = set()
    9. for pos in validPos:
    10. curVal = board[row + pos[0]][col + pos[1]]
    11. if curVal is ".":
    12. continue
    13. if curVal in s:
    14. return False
    15. s.add(curVal)
    16. return True
    17. def validRow(self, board, row):
    18. s = set()
    19. for curVal in board[row]:
    20. if curVal is ".":
    21. continue
    22. if curVal in s:
    23. return False
    24. s.add(curVal)
    25. return True
    26. def validCol(self, board, col):
    27. s = set()
    28. for row in board:
    29. curVal = row[col]
    30. if curVal is ".":
    31. continue
    32. if curVal in s:
    33. return False
    34. s.add(curVal)
    35. return True
    36. def isValidSudoku(self, board):
    37. """
    38. :type board: List[List[str]]
    39. :rtype: bool
    40. """
    41. pos3by3 = [
    42. [1, 1], [1, 4], [1, 7],
    43. [4, 1], [4, 4], [4, 7],
    44. [7, 1], [7, 4], [7, 7]
    45. ]
    46. for pos in pos3by3:
    47. if not self.valid3by3(board, pos[0], pos[1]):
    48. return False
    49. for row in range(0, 9):
    50. if not self.validRow(board, row):
    51. return False
    52. for col in range(0, 9):
    53. if not self.validCol(board, col):
    54. return False
    55. return True
    56. s = Solution()
    57. board = [
    58. [".", "8", "7", "6", "5", "4", "3", "2", "1"],
    59. ["2", ".", ".", ".", ".", ".", ".", ".", "."],
    60. ["3", ".", ".", ".", ".", ".", ".", ".", "."],
    61. ["4", ".", ".", ".", ".", ".", ".", ".", "."],
    62. ["5", ".", ".", ".", ".", ".", ".", ".", "."],
    63. ["6", ".", ".", ".", ".", ".", ".", ".", "."],
    64. ["7", ".", ".", ".", ".", ".", ".", ".", "."],
    65. ["8", ".", ".", ".", ".", ".", ".", ".", "."],
    66. ["9", ".", ".", ".", ".", ".", ".", ".", "."]
    67. ]
    68. res = s.isValidSudoku(board)
    69. print(res)








  • 相关阅读:
    Java IO/NIO
    LeetCode—— 两两交换链表中的节点
    LeetCode——合并K个排序链表
    LeetCode第201场周赛
    LeetCode第202场周赛
    LeetCode215. 数组中的第K个最大元素
    LeetCode213. 打家劫舍 II
    LeetCode212. 单词搜索 II
    LeetCode211. 添加与搜索单词
    LeetCode210. 课程表 II
  • 原文地址:https://www.cnblogs.com/xiejunzhao/p/8319163.html
Copyright © 2011-2022 走看看