【学习】验证数独的正确性

源于面试的一个问题,在leetcode里也有这道题,参考站内的一篇文章。

首先此问题的分析需要满足三个约束条件:

  1. 每行不能有重复的数
  2. 每列不能有重复的数
  3. 每个3*3的方格中不能有重复的数

其中前两个约束条件都是容易满足的,关键在第三个。
【学习】验证数独的正确性_第1张图片
使用三个与数独相同尺寸的二维数组,作为visited的tag,分别记录行、列和3*3方格的数据。

关键在于上述的16行代码,接下来将详细分析:
首先i / 3 和 j / 3会将当前的位置映射到33小方格里,也即判断当前的数据属于哪个3 * 3小方格(分别表示行和列信息),将其转化为index也即i / 3 * 3 + j / 3。

位操作的方案类似,就是用位操作代替了数组操作从而提高了存储效率。

你可能感兴趣的:(学习,学习)