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

yizhihongxing

判断有效的数独是一道常见的编程面试题,本文将介绍如何使用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日

相关文章

  • 在页面中引入js的两种方法(推荐)

    在页面中引入JavaScript脚本有两种主要的方法,分别是通过script标签嵌入JavaScript代码和通过外部文件引入JavaScript代码。 嵌入JavaScript代码 要嵌入JavaScript代码,我们可以使用<script>标签来完成,在<script>标签中写入JavaScript代码,将其嵌入HTML页面即可。…

    JavaScript 2023年5月27日
    00
  • JS赋值、浅拷贝和深拷贝(数组和对象的深浅拷贝)实例详解

    JS赋值、浅拷贝和深拷贝 在JavaScript开发中,我们经常需要对变量进行赋值操作,同时还需要将对象或数组复制到另一个变量中。这些操作看起来很简单,但如果不理解JavaScript中变量存储的方式,就容易引出一些微妙的问题。本文将简单介绍JS赋值、浅拷贝和深拷贝。 JS赋值 JS赋值操作可以将一个变量的值赋给另一个变量。这是一种基本的操作,也是很容易看懂…

    JavaScript 2023年5月27日
    00
  • JavaScript中关于数组的调用方式

    JavaScript中的数组是一组值的有序集合,可以通过数字索引来访问这些值。在JavaScript中,数组可以通过几种不同的方式来创建和访问。 创建数组 JavaScript中的数组可以通过以下两种方式来创建: 直接使用方括号[]来创建一个空数组,如下所示: const arr1 = []; 使用方括号[]并在其中包含数组元素,如下所示: const ar…

    JavaScript 2023年5月27日
    00
  • js字符串中空格和换行符(\r,\s,\n,\r\n)浅析

    JS 字符串中空格和换行符(\r,\s,\n,\r\n)浅析 在 JavaScript 中,字符串是一种常用的数据类型,它可以用来表示文字、数字、符号和其他字符序列。在实际编程中,我们经常会遇到字符串中出现空格和换行符这些特殊字符,影响字符串的输出效果。本文将深入分析 JavaScript 字符串中空格和换行符的使用方法和规则,并且提供一些示例代码帮助读者更…

    JavaScript 2023年5月28日
    00
  • jQuery使用cookie与json简单实现购物车功能

    下面是详细讲解“jQuery使用cookie与json简单实现购物车功能”的完整攻略: 简介 购物车是电商网站必不可少的功能,通过购物车,用户可以将自己关心的商品加入到购物车中,然后在统一的界面进行管理、筛选、结算等操作。本攻略将讲解如何使用 jQuery、JSON、Cookie 等技术实现购物车功能。 步骤讲解 步骤1:购物车结构设计 首先,我们需要考虑购…

    JavaScript 2023年5月27日
    00
  • Next.js项目实战踩坑指南(笔记)

    Next.js项目实战踩坑指南(笔记) 介绍 Next.js是一个React框架,它能够帮助开发者快速构建React应用,并集成了很多有用的特性和插件,例如服务器端渲染、静态文件生成等等。在使用Next.js进行开发时,可能会遇到一些问题和坑,这篇文章主要是讲解在实际开发中可能遇到的一些问题,并提供解决方案。 坑1: 如何在Next.js中使用自定义路由 默…

    JavaScript 2023年6月11日
    00
  • ajax请求get与post的区别总结

    针对“ajax请求get与post的区别总结”,建议分以下几个部分详细讲解: 一、什么是Ajax? Ajax(Asynchronous JavaScript And XML)指的是一种用于在Web页中实现异步请求的技术,在不刷新整个页面的情况下对页面的局部进行更新。简单来说,使用Ajax可以让前端通过异步的方式与后端进行交互和数据传输。 二、get和post…

    JavaScript 2023年6月11日
    00
  • python算的上脚本语言吗

    Python通常被归类为一种脚本语言,因为它通常用于编写简单的脚本来完成较小的任务,如自动化一些常见的操作。下面是详细的讲解和两个示例说明: Python是脚本语言吗 Python被称为一种脚本语言,因为它通常被用于编写脚本,这些脚本可以快速完成一些任务,如系统管理、文件处理、数据分析、Web开发和自动化测试等。 此外,Python的语法简单,并且使用方便,…

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