leetcode系列 演算法 困難 解數獨

2021-10-04 18:46:25 字數 2220 閱讀 4069

前段時間碰巧寫了乙個,直接拿來用了=,=

解題思路參考: 【雜記】數獨求解

因為要適配本題的格式,稍微做了修改

class solution:

# 判斷是否是有效的數獨

def is_valid(self, row, column, rect_num):

rect_num = row // 3 * 3 + column // 3

if self.shudu_array[row][column] == '.':

return false

curr_num = self.shudu_array[row][column]

if curr_num in self.rec['row'][row]:

return false

elif curr_num in self.rec['column'][column]:

return false

elif curr_num in self.rec['rect'][rect_num]:

return false

return true

# 主流程函式

def get_res(self):

row, column = self.get_zero_pos()

# 如果找不到需要填寫數字的位置,則已求得解,遞迴結束

if row >= 9 or column >= 9:

return true

# 小方格的編號

rect_num = row // 3 * 3 + column // 3

for val in range(1, 10):

val = str(val)

self.shudu_array[row][column] = str(val)

# 判斷填入數字後,是否是有效的數獨

if not self.is_valid(row, column, rect_num):

self.shudu_array[row][column] = '.'

continue

# 更新記錄表的行、列和小方格資料

# 判斷是否填入成功

if self.get_res():

return true

self.shudu_array[row][column] = '.'

self.rec['row'][row].pop()

self.rec['column'][column].pop()

self.rec['rect'][rect_num].pop()

return false

# 獲取下個需要填寫數字的行列下標

def get_zero_pos(self):

for row in range(0, 9):

for column in range(0, 9):

if '.' == self.shudu_array[row][column]:

return row, column

return row + 1, column + 1

def solvesudoku(self, board: list[list[str]]) -> none:

"""do not return anything, modify board in-place instead.

""" # 要解的原始數獨

self.shudu_array = board

# 用於記錄當前每行、每列、每個小方格已填入的陣列,用於判斷是否是有效的數獨

self.rec = ,\

'column' : ,\

'rect' : }

# 根據原始數獨陣列,初始化記錄表

for row in range(0, 9):

for column in range(0, 9):

rect_num = row // 3 * 3 + column // 3

if self.shudu_array[row][column] == '.':

continue

curr_num = self.shudu_array[row][column]

self.get_res()

board = self.shudu_array

Latex困難解決集合

在寫 報告的過程中,面對latex的漂亮格式無法抵抗,常常把檔案整理成latex格式。但是在寫作的過程中,會遇到很多word中很容易解決,但是latex中卻不知道如何實現的小功能,這裡一一記下來。verb命令的使用 在文中需要引用 即verbatim格式 注意不是花括號 integration by...

克服困難,解決遇到的問題!!

遇到了一些問題,一度產生放棄的想法,不過好歹最後還是一路堅持了下來,將問題解決了大半 反觀以前做圓角邊框的時候,要用程式解大量的曲線方程,算得我真是想吐,也是想放棄,不過還是挺到最後把這塊骨頭啃了下來 這次做的是乙個將所有形狀放縮成同一高度的功能,遇到的一些困難,都是因為粗心大意所致,不過也是有一些...

leetcode系列 演算法 中等 合併區間

按照第乙個數字進行排序 排序後,新增變數new list儲存遍歷結果,初始值為排序後的第一對數字 遍歷從index 1開始,每次遍歷乙個新數字對,只需要判斷第乙個數字,是否在new list最後乙個數字對中間 如果在,則合併兩對數字 如果不在,插入新數字對 class solution def me...