日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python37降到36原来的包还可以用吗_【lc刷题】36/37 有效的数独/解数独(143-144/300)...

發布時間:2025/1/21 python 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python37降到36原来的包还可以用吗_【lc刷题】36/37 有效的数独/解数独(143-144/300)... 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

143-144/300

有效的數獨

判斷一個 9x9 的數獨是否有效。只需要根據以下規則,驗證已經填入的數字是否有效即可。

數字 1-9 在每一行只能出現一次。

數字 1-9 在每一列只能出現一次。

數字 1-9 在每一個以粗實線分隔的 3x3 宮內只能出現一次。

上圖是一個部分填充的有效的數獨。

數獨部分空格內已填入了數字,空白格用 ‘.’ 表示。

示例 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 存在, 因此這個數獨是無效的。

說明:

一個有效的數獨(部分已被填充)不一定是可解的。

只需要根據以上規則,驗證已經填入的數字是否有效即可。

給定數獨序列只包含數字 1-9 和字符 ‘.’ 。

給定數獨永遠是 9x9 形式的。

來源:力扣(LeetCode)

鏈接:https://leetcode-cn.com/problems/valid-sudoku

思路:記錄

根據題目要求,對于每一個數,都有三個點位:某行,某列,某個3x3 subgrid

只要保證不重復就ok。 譬如下圖:左邊圖是個美好的數獨,右邊圖改了一下。

對于[0][0]的’8’有三個點位:0行,0列,(0,0)的subgrid

對于[2][2]的’8’有三個點位:2行,2列,(0,0)的subgrid

對于[3][0]的’8’有三個點位:3行,0列,(1,1)的subgrid

這就說明(0,0)subgrid有倆’8’,0列也有倆’8’,不行啊。

所以見過的用(行,此數字),(此數字,列)【倒個個兒,防止行列不分】,(subgrid的坐標,此數字) 來記錄。

然后判斷集合==set(此集合),同則T,不同就F。

class Solution:

def isValidSudoku(self, board: List[List[str]]) -> bool:

res = []

for i, row in enumerate(board):

for j, n in enumerate(row):

if n != '.':

res += (i,n),(n,j),(i//3,j//3,n)

return len(res) == len(set(res))1

2

3

4

5

6

7

8

9

10

解數獨

編寫一個程序,通過已填充的空格來解決數獨問題。

一個數獨的解法需遵循如下規則:

數字 1-9 在每一行只能出現一次。

數字 1-9 在每一列只能出現一次。

數字 1-9 在每一個以粗實線分隔的 3x3 宮內只能出現一次。

空白格用 ‘.’ 表示。

一個數獨。

答案被標成紅色。

Note:

給定的數獨序列只包含數字 1-9 和字符 ‘.’ 。

你可以假設給定的數獨只有唯一解。

給定數獨永遠是 9x9 形式的。

來源:力扣(LeetCode)

鏈接:https://leetcode-cn.com/problems/sudoku-solver

思路:有選擇的嘗試

譬如走到[0][2]要填個數:

最初選擇:{‘1’, ‘2’, ‘3’, ‘4’, ‘5’, ‘6’, ‘7’, ‘8’, ‘9’}

減去行出現過的{’.’, ‘3’, ‘5’, ‘7’}

減去列出現過的 {’.’, ‘8’}

減去subgrid中出現過的:{’.’, ‘3’, ‘5’, ‘6’, ‘8’, ‘9’}

最后的結果是:{‘1’, ‘2’, ‘4’}

然后當[0][2]=1時,走向[0][3],開始新的一輪嘗試。

譬如,前面都嘗試沒問題,然后嘗試[0][7] =2的下一步[0][8] = 9

但列出現過9,這時候{‘1’, ‘2’, ‘3’, ‘4’, ‘5’, ‘6’, ‘7’, ‘8’, ‘9’} - {‘1’, ‘2’, ‘3’, ‘4’, ‘5’, ‘6’, ‘7’, ‘8’}-{‘1’, ‘3’, ‘5’, ‘6’, ‘9’} - {‘1’, ‘2’, ‘6’} = set(), 屁也沒有, 退回上一步[0][7] =2, 把[0][7]恢復為’.’

然后嘗試[0][7] =9,那么下一步[0][8] = 2

行列subgrid都不重復,進入下一行的嘗試,[1][1] = …

當進行到[8][2] =1時,一切完美,沒有’.'的存在,我們就可以一層層返回之前的嘗試收尾。

class Solution:

def solveSudoku(self, board):

def dfs():

for i, row in enumerate(board):

for j, num in enumerate(row):

if num == '.':

for x in {'1', '2', '3', '4', '5', '6', '7', '8', '9'} - {row[k] for k in range(9)} - {board[k][j] for k in range(9)} - {board[i // 3 * 3 + m][j // 3 * 3 + n] for m in range(3) for n in range(3)}:

board[i][j] = x

if dfs(): return True

board[i][j] = '.'

return False

return True

dfs()1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

總結

以上是生活随笔為你收集整理的python37降到36原来的包还可以用吗_【lc刷题】36/37 有效的数独/解数独(143-144/300)...的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。