Python如何判斷數獨是否合法,Python判斷數合法

來源:互聯網
上載者:User

Python如何判斷數獨是否合法,Python判斷數合法

介紹

該數獨可能只填充了部分數字,其中缺少的數字用 . 表示。

注意事項

一個合法的數獨(僅部分填充)並不一定是可解的。我們僅需使填充的空格有效即可。

解體思路

將數獨按照行、列和塊進行預先處理,然後分別判斷是否合法。
利用Python的運算式推導,匿名函數和all函數可以很方便的進行處理。

代碼

class Solution:# @param board, a 9x9 2D array# @return a booleandef isValidSudoku(self, board): rows = [list(lst[::]) for lst in board] columns = [[lst[idx] for lst in board] for idx in range(9)] blocks_origin = [board[row][column] for x in [[0, 1, 2], [3, 4, 5], [6, 7, 8]] for y in [[0, 1, 2], [3, 4, 5], [6, 7, 8]] for row in x for column in y] # 利用一些技巧直接按塊儲存資料 blocks = [[blocks_origin[row * 9 + column] for column in range(9)] for row in range(9)] check = lambda lst: all([lst.count(x) == 1 for x in lst if x != '.']) # 判斷一條記錄(按某種方式排列的九個數字)是否合法 return all([check(x) for style in (rows, columns, blocks) for x in style]) # 一步搞定

小結

能不用迴圈體盡量不用迴圈體,以上就是這篇文章的全部內容,希望對大家的學習和工作能有所協助,如果有疑問大家可以留言交流。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.