问题陈述 给定一个 9x9 数独棋盘,确定它是否有效。棋盘由一个二维数组表示,其中空单元格用 表示'.'。有效的数独棋盘满足以下规则: 每行必须包含数字 1–9,且不能重复。 每列必须包含数字 1–9,且不能重复。 九个 3x3 子网格中的每一个都必须包含数字 1–9,且不能重复。
初步方法 一种简单的方法可能涉及对每行、每列和每个子网格进行单独检查。这通常需要多次检查棋盘,从而导致时间复杂度增加。但是,我们可以通过在一次检查中检查所有三个约束来优化这一点。 优化解决方案 我们可以维护三组集合来跟踪每行、每列和 3x3 子网格中看到的数字。这样,我们遍历棋盘一次,同时检查所有约束
解释 初始化:创建三个集合数组: rows:跟踪每行中看到的数字。 cols:跟踪每列中看到的数字。 boxes:追踪每个 3x3 子网格中看到的数字。 单次遍历:遍历棋盘上的每一个单元格: 如果单元格为空,则跳过该单元格 ( '.')。 使用 计算子网格索引Math.floor(i / 3) * 3 + Math.floor(j / 3)。 检查当前数字是否已经出现在相应的行、列或子网格中。 如果有,请false立即返回。 否则,将该数字添加到相应的集合中。 返回:如果遍历结束时没有发现重复项,则返回true。
优化方法的好处 效率:棋盘仅被遍历一次,由于棋盘大小固定(9x9),因此解决方案的时间复杂度为 O(1)。 清晰度:使用集合使得逻辑变得直接且易于理解。 简单:通过在单个循环中处理行、列和子网格,代码保持干净、简洁。
标签:遍历,数字,验证,JavaScript,网格,每列,棋盘,数独 From: https://www.cnblogs.com/jiangyueniannian/p/18280997