JS实现判断有效的数独算法示例

判断有效的数独是一道常见的编程面试题,本文将介绍如何使用JavaScript实现一个有效的数独判断算法。

如何表示数独?

数独可表示为一个9x9的二维数组,其中空白单元格表示为0,已填充数字的单元格则为1至9之间的数字。

示例:

const board = [
  [5, 3, 0, 0, 7, 0, 0, 0, 0],
  [6, 0, 0, 1, 9, 5, 0, 0, 0],
  [0, 9, 8, 0, 0, 0, 0, 6, 0],
  [8, 0, 0, 0, 6, 0, 0, 0, 3],
  [4, 0, 0, 8, 0, 3, 0, 0, 1],
  [7, 0, 0, 0, 2, 0, 0, 0, 6],
  [0, 6, 0, 0, 0, 0, 2, 8, 0],
  [0, 0, 0, 4, 1, 9, 0, 0, 5],
  [0, 0, 0, 0, 8, 0, 0, 7, 9]
];

算法流程

对于数独的有效性判断算法可以按照以下流程进行实现:

  1. 验证每一行是否符合规则,即是否包含1到9的数字,而且不能有重复数字。
  2. 验证每一列是否符合规则,即是否包含1到9的数字,而且不能有重复数字。
  3. 验证每一宫是否符合规则,即是否包含1到9的数字,而且不能有重复数字。

代码实现

下面是使用JavaScript实现的代码:

function isValidSudoku(board) {
  const rows = [];
  const cols = [];
  const boxes = [];

  // 初始化rows、cols和boxes数组
  for (let i = 0; i < 9; i++) {
    rows[i] = new Set();
    cols[i] = new Set();
    boxes[i] = new Set();
  }

  // 遍历数独中的每一个元素
  for (let i = 0; i < 9; i++) {
    for (let j = 0; j < 9; j++) {
      const num = board[i][j];

      // 如果当前格是空白,直接跳过当前轮次
      if (num === 0) continue;

      // 计算该值所属的宫
      const boxIdx = Math.floor(i / 3) * 3 + Math.floor(j / 3);

      // 检测该值是否在当前的行、列或宫中已存在
      if (rows[i].has(num) || cols[j].has(num) || boxes[boxIdx].has(num)) {
        return false;
      } else {
        rows[i].add(num);
        cols[j].add(num);
        boxes[boxIdx].add(num);
      }
    }
  }

  return true;
}

示例一

假设我们有以下数独:

const board = [
  [5, 3, 0, 0, 7, 0, 0, 0, 0],
  [6, 0, 0, 1, 9, 5, 0, 0, 0],
  [0, 9, 8, 0, 0, 0, 0, 6, 0],
  [8, 0, 0, 0, 6, 0, 0, 0, 3],
  [4, 0, 0, 8, 0, 3, 0, 0, 1],
  [7, 0, 0, 0, 2, 0, 0, 0, 6],
  [0, 6, 0, 0, 0, 0, 2, 8, 0],
  [0, 0, 0, 4, 1, 9, 0, 0, 5],
  [0, 0, 0, 0, 8, 0, 0, 7, 9]
];

我们可以使用以下代码来判断该数独是否有效:

console.log(isValidSudoku(board)); // true

示例二

假设我们有以下数独:

const board = [
  [8, 3, 0, 0, 7, 0, 0, 0, 0],
  [6, 0, 0, 1, 9, 5, 0, 0, 0],
  [0, 9, 8, 0, 0, 0, 0, 6, 0],
  [8, 0, 0, 0, 6, 0, 0, 0, 3],
  [4, 0, 0, 8, 0, 3, 0, 0, 1],
  [7, 0, 0, 0, 2, 0, 0, 0, 6],
  [0, 6, 0, 0, 0, 0, 2, 8, 0],
  [0, 0, 0, 4, 1, 9, 0, 0, 5],
  [0, 0, 0, 0, 0, 0, 0, 7, 9]
];

我们可以使用以下代码来判断该数独是否有效:

console.log(isValidSudoku(board)); // false

在以上两个示例中,第一个数独是有效的,而第二个数独则无效,因为第一行和第一列都存在重复数字。

总结

以上是使用JavaScript实现判断有效的数独算法示例的完整攻略,通过将数独表示为二维数组,并使用一个Set数据结构来存储每行、每列和每宫中已存在的数字,最终得以实现有效的数独判断。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JS实现判断有效的数独算法示例 - Python技术站

(0)
上一篇 2023年5月28日
下一篇 2023年5月28日

相关文章

  • JavaScript解析及序列化JSON的方法实例分析

    JavaScript解析及序列化JSON的方法实例分析 什么是JSON JSON,全称JavaScript Object Notation,一种轻量级的数据交换格式。它采用纯文本格式来表示数据,使得其可以在不同的平台、编程语言和操作系统之间进行数据传输。 JSON可以表示对象(object)、数组(array)、字符串(string)、数字(number)、…

    JavaScript 2023年6月10日
    00
  • jsonp跨域获取数据的基础教程

    关于”JSONP跨域获取数据的基础教程”,以下是一份完整攻略。 什么是JSONP跨域获取数据? 当浏览器通过 AJAX 访问另一个域下的资源时,就会遇到跨域问题。JSONP 跨域获取数据是一种跨域解决方案,它利用了 html 页面可以跨域引用 js 脚本文件的特性,从而绕过了跨域限制。 JSONP 跨域获取数据的基本思路 JSONP 跨域获取数据的基本思路是…

    JavaScript 2023年5月27日
    00
  • JavaScript检测原始值、引用值、属性

    JavaScript是一门弱类型语言,因此理解原始值和引用值的概念对于开发人员来说至关重要。在JavaScript中,有两种类型的值:原始值和引用值。原始值是不可变的,而引用值是可变的。 JavaScript的原始值和引用值 JavaScript的原始值包括字符串、数字、布尔值等。原始值是不可变的,也就是说,无法直接更改原始值的值。例如: let a = &…

    JavaScript 2023年6月10日
    00
  • JavaScript中的值类型详细介绍

    JavaScript中的值类型,又称为基本数据类型,共有六种:数字(Number)、字符串(String)、布尔值(Boolean)、空(Null)、未定义(Undefined)和符号(Symbol)。在本文中,我们将详细介绍每种类型的特点和用法。 数字(Number) 数字类型代表着数值,包括整数和浮点数。JavaScript使用的是双精度浮点数格式,即N…

    JavaScript 2023年5月28日
    00
  • 由 JavaScript 的 with 引发的探索

    标题:由 JavaScript 的 with 引发的探索 背景 JavaScript 中的 with 关键字让你可以在代码中使用更简洁的语法来访问一个对象的属性。然而,使用 with 带来的优雅语法留下的是性能问题。本文将介绍如何使用 JavaScript 的基本概念和语法,避免 with 带来的问题。 问题 使用 with 增加了用于作用域查找的代码,导致…

    JavaScript 2023年6月11日
    00
  • JavaScript构造函数详解

    JavaScript构造函数详解 什么是构造函数? 构造函数是一种特殊类型的函数,用于创建对象。构造函数通常情况下的命名都以大写字母开头。构造函数可以被用于创建多个相同类型的对象。 构造函数的语法 function ConstructorName(param1, param2) { this.property1 = param1; this.property…

    JavaScript 2023年5月27日
    00
  • javascript获取网页中指定节点的父节点、子节点的方法小结

    JavaScript获取网页中指定节点的父节点、子节点的方法小结 在使用JavaScript操作DOM的过程中,经常需要获取指定节点的父节点和子节点。本篇文章将为大家详细讲解在JavaScript中如何获取指定节点的父节点和子节点。 获取父节点 获取父节点的方法是使用parentNode属性。parentNode属性返回指定节点的父元素节点。代码如下: va…

    JavaScript 2023年6月10日
    00
  • javascript实时显示北京时间的方法

    实时显示北京时间可以用JavaScript来实现,具体实现方法有多种,下面我将分享两种常用方法,分别是: 第一种方法:使用Date对象实现实时更新北京时间 在HTML文件中通过<script>标签引入JavaScript代码,如下: <!DOCTYPE html> <html> <head> <title…

    JavaScript 2023年5月27日
    00
合作推广
合作推广
分享本页
返回顶部