📅  最后修改于: 2023-12-03 15:24:52.881000             🧑  作者: Mango
有时候,您需要编写代码来确定一个数独是否有效。在本教程中,我们将介绍如何使用 TypeScript 编写这样的代码。
数独是一个 9x9 的网格,由 81 个单元格组成。数独规则如下:
每行、每列、每个 3x3 的子区域内都必须包含数字 1 到 9,且不能重复。
空单元格用 0 表示。
首先,让我们来定义数独的类型:
type Sudoku = number[][];
这个类型表示 9x9 的数独网格,其中每个单元格都是数字类型。
接下来,让我们来编写一个函数来检查数独是否有效。我们将使用以下步骤:
检查每行中的数字是否重复。
检查每列中的数字是否重复。
检查每个 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 代码。