有效的数独

判断一个 9x9 的数独是否有效。只需要根据以下规则,验证已经填入的数字是否有效即可。

数字1-9在每一行只能出现一次。

数字1-9在每一列只能出现一次。

数字1-9在每一个以粗实线分隔的3x3宫内只能出现一次。

上图是一个部分填充的有效的数独。

数独部分空格内已填入了数字,空白格用'.'表示。

示例 1:

输入

示例 2:

输入:

输出:false解释:除了第一行的第一个数字从 5改为8 以外,空格内其他数字均与 示例1 相同。    但由于位于左上角的 3x3 宫内有两个 8 存在, 因此这个数独是无效的。

说明:

一个有效的数独(部分已被填充)不一定是可解的。

只需要根据以上规则,验证已经填入的数字是否有效即可。

给定数独序列只包含数字1-9和字符'.'。

给定数独永远是9x9形式的。


读题读题:读不下去了,什么玩意啊,没见过啊,给一个由列表组成的列表,然后返回真假。

有心搞一个随机算法,随机返回0,1。也就是传说中的猴子算法,如果样例不多完全可行,我甚至用这个方法解决点触验证码,活该找不着工作。

沉下心来思考,这是基础题,不会难的,首先解决一个问题,什么是数独?这个不知道这题不用做了。


数独盘面是个九宫,每一宫又分为九个小格。在这八十一格中给出一定的已知数字和解题条件,利用逻辑和推理,在其他的空格上填入1-9的数字。使1-9每个数字在每一行、每一列和每一宫中都只出现一次,所以又称“九宫格”。


嗯,9*9的数独,那就是9个宫,题里由数字和逗号组成,如果全在,那就是123456789,

没有0,九个数字,那就是

我们要判断每一行中现有数字有没有重复的,每一列中数字有没有重复的,每一宫中有没有重复的,每个列表在都包含数字和字符点,我们要判断数字重复首先就要去除干扰项点,

行判断:a = 100   设置一个初始值

                for i in range(len(board):   每个列表是一行

                   for j in range(len(board[i])):   遍历每一行  必须要有【:】 每次提取i的一个复制,然后对i操作

                        if board[i][j] == '.':    判断元素是不是点

                                 board[i][j] = a

                                 a += 1

     不用去除的方法,去除后元素位置还都变了,将所有点都变成不同的数字,设置一个初始值a = 100,每当遇到空白符号就将其变成a,a自增1.

这样就完成了预处理,然后开始判断,每一个区域都是9个元素组成,如果有重复的,那么这个数独为假,用set方法去重判断长度是否变化


for i in range(9):

b = [ ]  完成一列清空一列

行            if len(set(board[i]) != 9:

                        rreturn 0

  列           for j in range( 9):

                        b.append(board[j][i])  每一列组成一个列表

                if  len(set(b)) !=9:

                        return 0                   

然后是对每个宫组成列表,观察规律,a00a01a02a10a11a12a20a21a22

那就是横竖都遍历0到2,所有宫都是差3,

横着数3个宫,竖着数3个宫,我僵住了,好难啊

找到九个基准点 

22,25,28,52,55,58,82,85,88,没什么用,做减法更难

00,03,06,30, 33,36,60,63,66

居然搞了3层for,都不如手写九个列表

3层不行就4层,我真是个人才



开干


通过470个样例,那我大体方法应该没错,那就是数独还有什么条件没注意到

观察一下,宫三处有两个1,然后找宫的问题,嗯,NB,for我能写成if,改正!!!!!

四层for循环能这样,看样子我没什么问题,学习一下别人的。

太长了,感觉就是繁琐,虽然整体不大,行9个列表,列九个列表,宫9个列表,一共纯手写也就27个,运行时间可能更短,但构造列表的方法是重要的。并且应该花时间深入了解一下字典,看别人用的不少,没感觉到有什么优势,但也要学习一下。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 题目:两数之和 描述: 判断一个数独是否有效,根据:Sudoku Puzzles - The Rules。(数独规...
    韦弦Zhy阅读 1,007评论 0 3
  • 一、题目 判断一个 9x9 的数独是否有效。只需要根据以下规则,验证已经填入的数字是否有效即可。 数字 1-9 在...
    Mage阅读 883评论 0 0
  • 题目描述:判断一个9x9 的数独是否有效。只需要根据以下规则,验证已经填入的数字是否有效即可。 数字1-9在每一行...
    windUtterance阅读 590评论 0 0
  • 判断一个 9x9 的数独是否有效。只需要根据以下规则,验证已经填入的数字是否有效即可。 数字 1-9 在每一行只能...
    程序员生涯阅读 172评论 0 0
  • 判断一个 9x9 的数独是否有效。只需要根据以下规则,验证已经填入的数字是否有效即可。 数字 1-9 在每一行只能...
    尼小摩阅读 488评论 0 0