📜  如何确保它在 python 中是有效的数独 - TypeScript (1)

📅  最后修改于: 2023-12-03 15:24:52.881000             🧑  作者: Mango

如何确保在 Python 中是有效的数独 - TypeScript

有时候,您需要编写代码来确定一个数独是否有效。在本教程中,我们将介绍如何使用 TypeScript 编写这样的代码。

确定数独是否有效的规则

数独是一个 9x9 的网格,由 81 个单元格组成。数独规则如下:

  1. 每行、每列、每个 3x3 的子区域内都必须包含数字 1 到 9,且不能重复。

  2. 空单元格用 0 表示。

使用 TypeScript 编写代码

首先,让我们来定义数独的类型:

type Sudoku = number[][];

这个类型表示 9x9 的数独网格,其中每个单元格都是数字类型。

接下来,让我们来编写一个函数来检查数独是否有效。我们将使用以下步骤:

  1. 检查每行中的数字是否重复。

  2. 检查每列中的数字是否重复。

  3. 检查每个 3x3 的子区域内的数字是否重复。

function isValidSudoku(sudoku: Sudoku): boolean {
    // Check each row
    for (let i = 0; i < 9; i++) {
        const row = sudoku[i];
        const set = new Set<number>();
        for (let j = 0; j < 9; j++) {
            const num = row[j];
            if (num === 0) continue;
            if (set.has(num)) return false;
            set.add(num);
        }
    }

    // Check each column
    for (let i = 0; i < 9; i++) {
        const col = sudoku.map(row => row[i]);
        const set = new Set<number>();
        for (let j = 0; j < 9; j++) {
            const num = col[j];
            if (num === 0) continue;
            if (set.has(num)) return false;
            set.add(num);
        }
    }

    // Check each sub-grid
    for (let i = 0; i < 9; i += 3) {
        for (let j = 0; j < 9; j += 3) {
            const set = new Set<number>();
            for (let r = i; r < i + 3; r++) {
                for (let c = j; c < j + 3; c++) {
                    const num = sudoku[r][c];
                    if (num === 0) continue;
                    if (set.has(num)) return false;
                    set.add(num);
                }
            }
        }
    }

    return true;
}

这个函数使用了 Set 类型来检查每行、每列和每个子区域中是否有重复数字。如果发现了重复数字,函数将立即返回 false,否则它将返回 true。

现在,您可以在 Python 中调用此函数,以确保您的数独是有效的:

import typescript as ts

sudoku = [[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]]

ts.isValidSudoku(sudoku)  # True
结论

在本教程中,我们介绍了如何使用 TypeScript 编写一个函数,它可以检查一个数独是否有效。我们希望这个教程对您有所帮助,使您能够编写更好的 TypeScript 代码。