【leetcode-36】valid sudoku(java)
2015-07-23 19:57
441 查看
问题描述:
Determine if a Sudoku is valid, according to: Sudoku Puzzles - The Rules.
The Sudoku board could be partially filled, where empty cells are filled with the character ‘.’.
分析:维护一个hash表,先按行查找,再按列查找,再按块查找。时间复杂度为O(n^2),n为输入的数组的行数。
代码如下:368ms
Determine if a Sudoku is valid, according to: Sudoku Puzzles - The Rules.
The Sudoku board could be partially filled, where empty cells are filled with the character ‘.’.
分析:维护一个hash表,先按行查找,再按列查找,再按块查找。时间复杂度为O(n^2),n为输入的数组的行数。
代码如下:368ms
[code] public boolean isValidSudoku(char[][] board) { int row = board.length; int col = board[0].length; HashSet<Character> sets = new HashSet<Character>(); for(int i = 0;i<row;i++){ sets.clear(); for(int j = 0;j<col;j++){ if(board[i][j]=='.') continue; if(sets.contains(board[i][j])) return false; if(board[i][j]>='1'&&board[i][j]<='9') sets.add(board[i][j]); else return false; } } for(int j = 0;j<col;j++){ sets.clear(); for(int i = 0;i<row;i++){ if(board[i][j]=='.') continue; if(sets.contains(board[i][j])) return false; if(board[i][j]>='1'&&board[i][j]<='9') sets.add(board[i][j]); else return false; } } int tmpRow,tmpCol; for(int i = 0;i<row/3;i++){ for(int j = 0;j<col/3;j++){ sets.clear(); for(int k = 0;k<3;k++){ for(int m = 0;m<3;m++){ tmpRow = i*3+k; tmpCol = j*3+m; if(board[tmpRow][tmpCol]=='.') continue; if(sets.contains(board[tmpRow][tmpCol])) return false; if(board[tmpRow][tmpCol]>='1'&&board[tmpRow][tmpCol]<='9') sets.add(board[tmpRow][tmpCol]); else return false; } } } } return true; }
相关文章推荐
- Java中单元测试中:@BeforeClass,@Before,@Test,@After,@AfterClass中的问题详解
- Java学习笔记--------为组建设置事件的步骤
- java 位操作
- Java构造器与多态
- java学习笔记-------通过实例来学习事件
- java中多态的简单学习与实践
- JAVA学习第八天
- Xml解析器(java用的)
- Thinking in Java 笔记(第二章 一切都是对象)
- 【java】利用set集合特性去重
- bj java 初学 2015-07-23
- Eclipse远程调试(远程服务器端监听)
- JAVA设计模式之单例模式
- 解决eclipse中logcat不显示log的问题
- SpringTest 使用说明 -构建无污染纯绿色事务测试框架 (记录用)
- UBUNTU 配置JDK环境
- Java programer的成长之路
- MyBatis java and MySql local variables
- java 访问web项目的servlet
- JAVA 堆和栈