leetcode 36. 有效的數獨

這道題一開始是想要採用哈希表的方式來做,但是對於哈希表還不是很熟系,對於python中的兩層的for循環也沒有很瞭解,還是欠缺了很多的地方

class Solution:
    def isValidSudoku(self, board: List[List[str]]) -> bool:
        row = [[x for x in y if x!='.'] for y in board] 
        col = [[x for x in y if x!='.'] for y in zip(*board)]
        pal = [[board[i+m][j+n] for m in range(3) for n in range (3) if board[i+m][j+n]!='.'] for i in (0,3,6) for j in (0,3,6)]
        return all(len(set(x)) == len(x) for x in (*row, *col, *pal))

前三行代碼很好理解,就是對於行,列,9個方格中的數字進行插入

row:就是按行遍歷,把除了' .'以外的數字放入到row中

col:中的zip處理的是元祖,也可以理解爲按照列來處理,並且有一個* 是處理成list類型

zip() 函數用於將可迭代的對象作爲參數,將對象中對應的元素打包成一個個元組,然後返回由這些元組組成的對象,這樣做的好處是節約了不少的內存。

我們可以使用 list() 轉換來輸出列表

如果各個迭代器的元素個數不一致,則返回列表長度與最短的對象相同。利用 * 號操作符,可以將元組解壓爲列表。
zip(*)解壓函數,將對象中的每一個元素/元祖/字符串的相同位置的子元素組合成一個新的元祖,並將所有組成的元祖以列表的形式進行展示。

return:set  

集合(set)是一個無序的不重複元素序列。

可以使用大括號 { } 或者 set() 函數創建集合,注意:創建一個空集合必須用 set() 而不是 { },因爲 { } 是用來創建一個空字典。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章