当前位置:   article > 正文

算法第三十四天-有效数独

算法第三十四天-有效数独

有效数独

题目要求

在这里插入图片描述

解题思路

一个简单的方法是,遍历9*9书读三次,以确保:

  • 行中没有重复的数字
  • 列中没有重复的数字
  • 3*3子数独中没有重复的数字
    但是,实际上,所有的一切都以可以在一次迭代中完成
    可以使用box_index = (row/3*3 + columns / 3,其中/是整出
    如何确保行、列、子数独没有重复项
    可以利用value -> count哈希映射来跟踪所有已经遇到的值

代码

class Solution:
    def isValidSudoku(self, board: List[List[str]]) -> bool:
        # init data
        rows = [{} for i in range(9)]
        columns = [{} for i in range(9)]
        boxes = [{} for i in range(9)]
        # validate a board
        for i in range(9):
            for j in range(9):
                num = board[i][j]
                if num != '.':
                    num = int(num)
                    box_index = (i // 3 ) * 3 + j // 3
                    
                    # keep the current cell value
                    rows[i][num] = rows[i].get(num, 0) + 1
                    columns[j][num] = columns[j].get(num, 0) + 1
                    boxes[box_index][num] = boxes[box_index].get(num, 0) + 1
                    
                    # check if this value has been already seen before
                    if rows[i][num] > 1 or columns[j][num] > 1 or boxes[box_index][num] > 1:
                        return False         
        return True

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24

复杂度分析

时间复杂度: O ( N ) O(N) O(N)
空间复杂度: O ( 1 ) O(1) O(1)

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/355051?site
推荐阅读
相关标签
  

闽ICP备14008679号