判斷乙個 9x9 的數獨是否有效。只需要根據以下規則,驗證已經填入的數字是否有效即可。
上圖是乙個部分填充的有效的數獨。數獨部分空格內已填入了數字,空白格用 『.』 表示。
示例 1
:輸入:[[
"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"]
]輸出:
true
示例 2
:輸入:[[
"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"]
]輸出:
false
解釋: 除了第一行的第乙個數字從 5 改為 8 以外,空格內其他數字均與 示例1 相同。
但由於位於左上角的 3x3 宮內有兩個 8 存在, 因此這個數獨是無效的。
說明:該題雖然為數獨問題,但是並不要求找到它對應的可行解,而只需要判斷當前給出的數獨棋盤是否合法,即此時是否滿足三條規則。由於棋盤可分為如下的九個方格,那麼每個方格都可以使用它左上角的座標表示。在判斷的流程中,我們使用逐個方格的方式進行判斷,為了便於判斷某個格仔中的數字是否違反了規則,定義如下的資料結構:
python解題**如下:
class
solution
:def
__init__
(self)
:# 用於記錄0 - 8 行,每一行的字元
self.rows =
# 用於記錄0 - 8 列,每一列的字元
self.cols =
// 初始化rows和cols的值為list形式
for i in
range(0
,9):
self.rows[
"{}"
.format
(i)]=[
] self.cols[
"{}"
.format
(i)]=[
]def
helpers
(self, board, row, col)
->
bool
:# 用於儲存某個方格中的字元
blog =
# 每個方格都是 3 * 3 大小
for i in
range(0
,3):
for j in
range(0
,3):
ch = board[row + i]
[col + j]
r = self.rows.get(
"{}"
.format
(row + i)
) c = self.cols.get(
"{}"
.format
(col + j)
)# 如果當前位置所在的行、列或者方格中已有該字元,直接返回false
if ch !=
'.'and ch in r or ch !=
'.'and ch in c or ch!=
'.'and ch in blog:
return
false
# 否則儲存當前字元,便於後續判斷
else
: self.rows[
"{}"
.format
(row + i)
] self.cols[
"{}"
.format
(col + j)
]return
true
defisvalidsudoku
(self, board)
->
bool
:# 這裡以3為步長,正好可以表示每個方格的左上角座標
for row in
range(0
,7,3
):for col in
range(0
,7,3
):r = self.helpers(board, row, col)
if r ==
false
:return
false
else
:continue
return
true
36 有效數獨
判斷乙個 9x9 的數獨是否有效。只需要根據以下規則,驗證已經填入的數字是否有效即可。數字 1 9 在每一行只能出現一次。數字 1 9 在每一列只能出現一次。數字 1 9 在每乙個以粗實線分隔的 3x3 宮內只能出現一次。對於每乙個遍歷到的當前元素,需要知道該元素是否之前已在該行,該列,該小方陣裡出...
36 有效的數獨
判斷乙個 9x9 的數獨是否有效。只需要根據以下規則,驗證已經填入的數字是否有效即可。數字 1 9 在每一行只能出現一次。數字 1 9 在每一列只能出現一次。數字 1 9 在每乙個以粗實線分隔的 3x3 宮內只能出現一次。上圖是乙個部分填充的有效的數獨。數獨部分空格內已填入了數字,空白格用 表示。示...
36 有效的數獨
判斷乙個9x9的數獨是否有效。只需要根據以下規則,驗證已經填入的數字是否有效即可。數字1 9在每一行只能出現一次。數字1 9在每一列只能出現一次。數字1 9在每乙個以粗實線分隔的3x3宮內只能出現一次。上圖是乙個部分填充的有效的數獨。數獨部分空格內已填入了數字,空白格用 表示。輸入 5 3 7 6 ...