- 921. Minimum Add to Make Parentheses Valid 使括号有效的最少添加
- 915. Partition Array into Disjoint Intervals 分割数组
- 932. Beautiful Array 漂亮数组
- 940. Distinct Subsequences II 不同的子序列 II
题目地址:https://leetcode.com/problems/valid-sudoku/description/
Determine if a 9x9 Sudoku board is valid. Only the filled cells need to be validated according to the following rules:
1、 Eachrowmustcontainthedigits1-9withoutrepetition.;
2、 Eachcolumnmustcontainthedigits1-9withoutrepetition.;
3、 Eachofthe93x3sub-boxesofthegridmustcontainthedigits1-9withoutrepetition.;
Apartially filled sudoku which is valid.
TheSudoku board could be partially filled, where empty cells are filled with the character '.'.
Example 1:
Input:
[
["5","3",".",".","7",".",".",".","."],
["6",".",".","1","9","5",".",".","."],
[".","9","8",".",".",".",".","6","."],
["8",".",".",".","6",".",".",".","3"],
["4",".",".","8",".","3",".",".","1"],
["7",".",".",".","2",".",".",".","6"],
[".","6",".",".",".",".","2","8","."],
[".",".",".","4","1","9",".",".","5"],
[".",".",".",".","8",".",".","7","9"]
]
Output: true
Example 2:
Input:
[
["8","3",".",".","7",".",".",".","."],
["6",".",".","1","9","5",".",".","."],
[".","9","8",".",".",".",".","6","."],
["8",".",".",".","6",".",".",".","3"],
["4",".",".","8",".","3",".",".","1"],
["7",".",".",".","2",".",".",".","6"],
[".","6",".",".",".",".","2","8","."],
[".",".",".","4","1","9",".",".","5"],
[".",".",".",".","8",".",".","7","9"]
]
Output: false
Explanation: Same as Example 1, except with the 5 in the top left corner being
modified to 8. Since there are two 8's in the top left 3x3 sub-box, it is invalid.
Note:
1、 ASudokuboard(partiallyfilled)couldbevalidbutisnotnecessarilysolvable.;
2、 Onlythefilledcellsneedtobevalidatedaccordingtothementionedrules.;
3、 Thegivenboardcontainonlydigits1-9andthecharacter'.'.;
4、 Thegivenboardsizeisalways9x9.;
判断一个9*9的二维数组是不是一个有效的数独。只用判断有效即可,即题目中的三个条件,不用求解。
如果只判断有效的话,实现三个函数分别对应三个条件即可:判断行,判断列,判断9宫格。
把要判断的这些位置的数字取出来,然后用set后的长度是否等于原长度就能知道是不是有重复数字了。题目中已经说了给出的数字只有1~9,所以省掉了很多事。判断之前需要把'.'给去掉,因为数字只允许出现一次,而'.'可能出现多次。
时间复杂度是O(N^2),空间复杂度是O(N).
代码如下:
class Solution(object):
def isValidSudoku(self, board):
"""
:type board: List[List[str]]
:rtype: bool
"""
n = len(board)
return self.isValidRow(board) and self.isValidCol(board) and self.isValidNineCell(board)
def isValidRow(self, board):
n = len(board)
for r in range(n):
row = [x for x in board[r] if x != '.']
if len(set(row)) != len(row):
return False
return True
def isValidCol(self, board):
n = len(board)
for c in range(n):
col = [board[r][c] for r in range(n) if board[r][c] != '.']
if len(set(col)) != len(col):
return False
return True
def isValidNineCell(self, board):
n = len(board)
for r in range(0, n, 3):
for c in range(0, n, 3):
cell = []
for i in range(3):
for j in range(3):
num = board[r + i][c + j]
if num != '.':
cell.append(num)
if len(set(cell)) != len(cell):
return False
return True
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
DDKK.COM 弟弟快看-教程,程序员编程资料站,版权归原作者所有
本文经作者:负雪明烛 授权发布,任何组织或个人未经作者授权不得转发
关闭。这个问题需要更多focused .它目前不接受答案。 想改善这个问题吗?更新问题,使其仅关注一个问题 editing this post . 6年前关闭。 Improve this questi
是否有算法或方法可以获得数独游戏的初始状态数独谜题。最好具有不同难度级别的能力? 最佳答案 基本上有两种方法。两者都需要 2 solvers ,一个类人求解器,它使用人类可执行的策略和回溯求解器。 使
我正在尝试准备数独项目。我现在有行和列控件。 如果我创建数组,则9 * 9程序在运行时崩溃,并且窗体窗口冻结。我通过单击“停止调试”按钮来停止它。但它与一小部分阵列完美配合。例如3 * 3。如果我创建
我仍在研究我的数独解算器,但又一次遇到了一些麻烦。我已经让数独解算器开始工作,但是每当我尝试解决一个真正“困难”的数独板时,我的解算器都会告诉我没有可能的解决方案,因为堆栈溢出错误。是的,我知道这些董
我正在尝试解决数独作为家庭作业的约束满足问题。我已经为特定行和列中的所有元素构造了不同的约束。我正在尝试为子区域中的元素构造不同的约束,但我遇到了一些麻烦。 我当前算法背后的总体思路是将子区域(例如
我对以下代码片段有疑问:它是一个数独求解器,通过填充空单元格来解决数独难题。我无法真正理解求解器方法背后的逻辑。为什么它在尝试 k=1-9 后返回 false 并在遍历所有单元格后返回 true 。我
【LeetCode】36. Valid Sudoku 解题报告(Python) 题目地址:https://leetcode.com/problems/valid-sudoku/description
是否有任何算法可以解决任何传统的数独难题,而无需猜测? 这里的 Guessing 是指尝试一个候选人,看看它走多远,如果发现与猜测矛盾,则回溯到猜测步骤并尝试另一个候选人;当所有候选人都用尽但没有成功
关闭。这个问题不满足Stack Overflow guidelines .它目前不接受答案。 想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。 12 个月前关闭。 Improve
我用c语言做了一个数独解算器,我的递归函数只适用于第一行而不是停止。它查找第一个值为 0 的元素并填充它,然后查找下一个值,并用另一个解决方案填充它。在它解决第一行后停止,我将如何启用 canSolv
我正在编写一个数独游戏,每个单元格由一个 JTextField 表示,总共有 81 个 JTextField 对象。这种安排让我想知道如何有效地清除拼图。 现在我有这个: void clear() {
我正在开发一个 Java 程序,用于检查数独谜题是否已解决。我已经完成了水平和垂直数字检查部分。但是当尝试检查方 block 时,我无能为力。这是我的检查系统的工作原理。 这就是我想做的。希望有人提供
我必须创建一个程序,将数独的 9 行显示为 9 个 9 位数字,然后提示用户对数独执行 6 种操作之一。然后我们必须在用户每次执行操作时输出数独。这是应该如何进行的示例运行: Welcome to S
所以我更新了我的代码,但我仍然对如何检查已完成的数独板中的 3x3 block 以查看它是否没有任何重复数字感到困惑。这是我更新的方法。 static boolean isBlock1Valid(in
您好,我正在开发数独检查器,它可以验证已完成的板的解决方案是否正确。我目前对如何在 block 内进行检查感到困惑。现在我有一个 boolean 值如下我正在检查左上角的 block (Block1)
http://home.earthlink.net/~benfranq/Sudoku.html 也许有人可以告诉我为什么它在 Internet Explorer 中不起作用 在其他浏览器中,它似乎工作
锁定。这个问题及其答案是 locked 因为这个问题是题外话但具有历史意义。它目前不接受新的答案或互动。 介绍 一个有效的数独网格由数字 1 到 9 填充,在每个 9 的子 block 、行或列中没
我正在尝试用 Java 创建一个数独求解器,总的来说,我对编程和 Java 都是新手。我真的不知道如何处理这种错误。我不断收到堆栈溢出错误。 我尝试了不同的代码,但没有一个有效,但无论如何,这是我最新
我回答说我会有一个二维数组。 然后我会有3个函数 一个检查水平状态。 另一个检查垂直状态的函数 另一个检查 3*3 block 条件。 但是他不满意,有谁能很好的回答这个问题吗? 我发现这个堆栈溢出链
# include int check(int a,int b); int check1(int a,int b,int c,int d); void recursive(int x,int pos
我是一名优秀的程序员,十分优秀!