题目:

判断数独是否合法

请判定一个数独是否有效。该数独可能只填充了部分数字,其中缺少的数字用 . 表示。
样例
下列就是一个合法数独的样例。
注意 一个合法的数独(仅部分填充)并不一定是可解的。我们仅需使填充的空格有效即可。
说明
什么是 数独?
http://sudoku.com.au/TheRules.aspx
http://baike.baidu.com/subview/961/10842669.htm
解题:
感觉这很难到不知道如何进行,在这里看到,只需判断每行,每类,每个小3*3矩阵内的数字是1-9就是合法的,但是这里只填充部分数的,按照上面说,没有填充的数 认为是该位置是合法的,这里的程序,也是这样搞的,感觉这不对头,但是意思是说:只要部分填充的数独满足了数独的条件,一定能填充成数独。<正确与否,我不确定,但是程序就是这样写的,逆推的结论>
Java程序:

  1. class Solution {
  2. /**
  3. * @param board: the board
  4. @return: wether the Sudoku is valid
  5. */
  6. public boolean isValidSudoku(char[][] board) {
  7. boolean[] visited = new boolean[9];
  8. //row
  9. for(int i=0;i<9;i++){
  10. Arrays.fill(visited,false); //填充visited数组中的每个元素都是false
  11. for(int j=0;j<9;j++){
  12. if(!process(visited,board[i][j]))
  13. return false;
  14. }
  15. }
  16.  
  17. //col
  18. for(int i=0;i<9;i++){
  19. Arrays.fill(visited,false);
  20. for(int j=0;j<9;j++)
  21. if(!process(visited,board[j][i]))
  22. return false;
  23. }
  24. //sub matrix
  25. for(int i=0;i<9;i+=3)
  26. for(int j=0;j<9;j+=3){
  27. Arrays.fill(visited,false);
  28. for(int k = 0;k<9;k++)
  29. if(!process(visited,board[i+ k/3][j + k%3]))
  30. return false;
  31. }
  32. return true;
  33. }
  34. private boolean process(boolean[] visited,char dight){
  35. if(dight=='.')
  36. return true;
  37. int num = dight - '0';
  38. if(num<1 || num>9 || visited[num-1])
  39. return false;
  40. visited[num-1] = true;
  41. return true;
  42. }
  43. };

总耗时: 822 ms

Python程序:

  1. class Solution:
  2. # @param board, a 9x9 2D array
  3. # @return a boolean
  4. def isValidSudoku(self, board):
  5.  
  6. # sub matrix
  7. for i in range(0,9,3):
  8. for j in range(0,9,3):
  9. visited = [False]*9
  10. for k in range(3):
  11. m = i + k
  12. n = j + k
  13. if(self.process(visited,board[m][n])==False):
  14. return False
  15.  
  16. # row
  17. for i in range(9):
  18. visited = [False]*9
  19. for j in range(9):
  20. if(self.process(visited,board[i][j])==False):
  21. return False
  22.  
  23. # col
  24. for j in range(9):
  25. visited = [False]*9
  26. for i in range(9):
  27. if(self.process(visited,board[i][j])==False):
  28. return False
  29.  
  30. return True
  31.  
  32. def process(self,visited,digit):
  33. if digit=='.':
  34. return True
  35. num = int(digit)
  36. if(num<1 or num>9 or visited[num-1]==True):
  37. return False
  38. visited[num-1] = True
  39. return True

总耗时: 148 ms

在判断3*3矩阵时候,根据我的这样方法很简单的哦

还有就是直判断行和列是否满足条件也能AC

所以我把判断小矩阵是否1-9组成放在了最上面

lintcode:Valid Sudoku 判断数独是否合法的更多相关文章

  1. 判断数独是否合法(LintCode)

    判断数独是否合法 请判定一个数独是否有效. 该数独可能只填充了部分数字,其中缺少的数字用. 表示. 样例 下列就是一个合法数独的样例. 注意 一个合法的数独(仅部分填充)并不一定是可解的.我们仅需使填 ...

  2. LintCode389.判断数独是否合法

    LintCode简单题:判断数独是否合法 问题描述: 请判定一个数独是否有效. 该数独可能只填充了部分数字,其中缺少的数字用 . 表示. 注意事项: 一个合法的数独(仅部分填充)并不一定是可解的.我们 ...

  3. LeetCode:36. Valid Sudoku,数独是否有效

    LeetCode:36. Valid Sudoku,数独是否有效 : 题目: LeetCode:36. Valid Sudoku 描述: Determine if a Sudoku is valid, ...

  4. 36. Valid Sudoku 判断九九有效的数独

    [抄题]: Determine if a 9x9 Sudoku board is valid. Only the filled cells need to be validated according ...

  5. [LeetCode] Valid Sudoku 验证数独

    Determine if a Sudoku is valid, according to: Sudoku Puzzles - The Rules. The Sudoku board could be ...

  6. [LeetCode] 36. Valid Sudoku 验证数独

    Determine if a 9x9 Sudoku board is valid. Only the filled cells need to be validated according to th ...

  7. [Leetcode] valid sudoku 有效数独

    Determine if a Sudoku is valid, according to: Sudoku Puzzles - The Rules. The Sudoku board could be ...

  8. LintCode_389 判断数独是否合法

    题目 请判定一个数独是否有效. 该数独可能只填充了部分数字,其中缺少的数字用 . 表示. 注意事项 一个合法的数独(仅部分填充)并不一定是可解的.我们仅需使填充的空格有效即可. 说明 什么是 数独? ...

  9. [leetcode]36. Valid Sudoku验证数独

    Determine if a 9x9 Sudoku board is valid. Only the filled cells need to be validated according to th ...

随机推荐

  1. Android Studio添加jar包

    1.先把jar包复制到项目的lib下,

  2. linux查看硬件信息

    1,查看CPU信息:cat /proc/cpuinfo2,查看板卡信息:cat /proc/pci3,查看USB设备:cat /proc/bus/usb/devices4,查看PCI信息:lspci ...

  3. 【Qt】Qt环境搭建(Qt Creator)【转】

    简述 上一节中介绍了如何进行Qt和Visual Studio的下载安装,随后演示了如何将Qt集成到Visual Studio中,并完成了我们第一个Qt小程序-Hello World.下面主要讲解如何利 ...

  4. ASP.NET中的ViewState

    曾经在两次面试中都遇到了这个问题,就是ViewState中存储的变量到底存储在哪里.由于基础比较差,以前在学习的时候,就没有注意 到这里的细节,包括Session中存储的变量,所以我想ViewStat ...

  5. SQL中char,varchar,nvarchar等的异同

    比较这几个数据类型,总是忘记,可能比较细节的原因.先做个记号,回头完善.

  6. Windows C盘格式化或者同平台迁移oracle数据库

    我们知道如果是Linux 同平台迁移oracle数据库.只要是安全关闭了数据库,在新机器上创建用户组,配置了环境变量,将数据库安装目录拷贝到对应的目录就好用了. 一直在寻求Windows平台上这类的解 ...

  7. Java集合的小抄

    在尽可能短的篇幅里,将所有集合与并发集合的特征.实现方式.性能捋一遍.适合所有"精通Java",其实还不那么自信的人阅读. [转自:花钱的年华] 期望能不止用于面试时,平时选择数据 ...

  8. 【jquery】javaScript中prototype的妙用 巧妙运用prototype属性原型链创建对象

    prototype  可以有好多有优化实现方法 http://blog.csdn.net/liuqiwen0512/article/details/8089690 在 JavaScript 中,每个函 ...

  9. Linux命令练级初级

    Linux命令练级初级 http://ke.qq.com/video/index.html?course_id=6815 ls    -a 所有文件    -l    类型,连接数,所属用户,工作组, ...

  10. java常用集合类:Deque,ArrayList,HashMap,HashSet

    图一:java collection 类图 Queue家族 无论是queue还是stack,现在常用的是Deque的实现类:如单线程的ArrayQueue,多线程的ArrayBlockingQueue ...