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