Python如何判断数独是否合法
介绍
该数独可能只填充了部分数字,其中缺少的数字用.表示。
注意事项
一个合法的数独(仅部分填充)并不一定是可解的。我们仅需使填充的空格有效即可。
解体思路
将数独按照行、列和块进行预处理,然后分别判断是否合法。
利用Python的表达式推导,匿名函数和all函数可以很方便的进行处理。
代码
classSolution: #@paramboard,a9x92Darray #@returnaboolean defisValidSudoku(self,board): rows=[list(lst[::])forlstinboard] columns=[[lst[idx]forlstinboard]foridxinrange(9)] blocks_origin=[board[row][column]forxin[[0,1,2],[3,4,5],[6,7,8]]foryin[[0,1,2],[3,4,5],[6,7,8]]forrowinxforcolumniny]#利用一些技巧直接按块储存数据 blocks=[[blocks_origin[row*9+column]forcolumninrange(9)]forrowinrange(9)] check=lambdalst:all([lst.count(x)==1forxinlstifx!='.'])#判断一条记录(按某种方式排列的九个数字)是否合法 returnall([check(x)forstylein(rows,columns,blocks)forxinstyle])#一步搞定
小结
能不用循环体尽量不用循环体,以上就是这篇文章的全部内容,希望对大家的学习和工作能有所帮助,如果有疑问大家可以留言交流。