摘要:題目描述請判定一個數獨是否有效。解體思路將數獨按照行列和塊進行預處理,然后分別判斷是否合法。代碼利用一些技巧直接按塊儲存數據判斷一條記錄按某種方式排列的九個數字是否合法一步搞定感想能不用循環體盡量不用循環體,她好,我也好。
背景
在LintCode刷題的時候碰到一個很水的題目,不過要注意很多細節,不然調試的時候非常麻煩,利用Python的一些小技巧寫了一個很簡短的解決方案。
題目描述請判定一個數獨是否有效。
該數獨可能只填充了部分數字,其中缺少的數字用 . 表示。
解體思路注意事項
一個合法的數獨(僅部分填充)并不一定是可解的。我們僅需使填充的空格有效即可。
將數獨按照行、列和塊進行預處理,然后分別判斷是否合法。
利用Python的表達式推導,匿名函數和all函數可以很方便的進行處理。
代碼class Solution:
# @param board, a 9x9 2D array # @return a boolean def 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]) # 一步搞定
# 感想 能不用循環體盡量不用循環體,她好,我也好。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/38181.html
摘要:如果重復則不合法,否則極為合法。在這里我們使用數組代替作為存儲行列和小正方形的值得數據結構。我存儲這所有的行列小正方形的情況,并判斷當前值是否重復。外循環則代表對下一行,下一列和下一個小正方形的遍歷。 題目要求 Determine if a Sudoku is valid, according to: Sudoku Puzzles - The Rules. The Sudoku boa...
摘要:題目描述有效的數獨判斷一個的數獨是否有效。上圖是一個部分填充的有效的數獨。數獨部分空格內已填入了數字,空白格用表示。說明一個有效的數獨部分已被填充不一定是可解的。只需要根據以上規則,驗證已經填入的數字是否有效即可。 題目描述 有效的數獨判斷一個 9x9 的數獨是否有效。只需要根據以下規則,驗證已經填入的數字是否有效即可。 數字 1-9 在每一行只能出現一次。數字 1-9 在每一列只能出...
摘要:可以針對筆者常用的數獨本文的實現都基于該,實現數獨的識別求解并把答案自動填入。專家級別的平均秒完成求解包括圖像數字提取,識別過程,完成全部操作。步驟四數獨求解,生成答案,并生成需要填充的數字序列。 1 序 ??數獨是源自18世紀瑞士的一種數學游戲。是一種運用紙、筆進行演算的邏輯游戲。玩家需要根據9×9盤面上的已知數字,推理出所有剩余空格的數字,并滿足每一行、每一列、每一個粗線宮(3*3...
摘要:上圖是一個部分填充的有效的數獨。數獨部分空格內已填入了數字,空白格用表示。但由于位于左上角的宮內有兩個存在因此這個數獨是無效的。說明一個有效的數獨部分已被填充不一定是可解的。只需要根據以上規則,驗證已經填入的數字是否有效即可。 判斷一個 9x9的數獨是否有效。只需要根據以下規則,驗證已經填入的數字是否有效即可。 數字 1-9 在每一行只能出現一次。 數字 1-9 在每一列只能出現一次...
閱讀 1564·2021-11-23 09:51
閱讀 1100·2021-10-12 10:12
閱讀 2820·2021-09-22 16:06
閱讀 3643·2019-08-30 15:56
閱讀 3470·2019-08-30 15:53
閱讀 3116·2019-08-29 16:29
閱讀 2368·2019-08-29 15:27
閱讀 2026·2019-08-26 10:49