leetcode题解-36.Valid Sudoku
2016-07-15 16:37
351 查看
题目: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 ‘.’. A partially filled sudoku which is valid.
Note:
A valid Sudoku board (partially filled) is not necessarily solvable. Only the filled cells need to be validated.
其实就是检验数独棋盘中已经给出的数字是否满足数独规则。即每行、每列、每个小九宫格内的数字是否重复。
思路:遍历棋盘,分别考察行、列、九宫格内数字是否满足条件,共九行,九列,九个九宫格。
1,使用三个hashset分别存储三个维度
2,使用数组存储。这种方法速度更快。
The Sudoku board could be partially filled, where empty cells are filled with the character ‘.’. A partially filled sudoku which is valid.
Note:
A valid Sudoku board (partially filled) is not necessarily solvable. Only the filled cells need to be validated.
其实就是检验数独棋盘中已经给出的数字是否满足数独规则。即每行、每列、每个小九宫格内的数字是否重复。
思路:遍历棋盘,分别考察行、列、九宫格内数字是否满足条件,共九行,九列,九个九宫格。
1,使用三个hashset分别存储三个维度
public boolean isValidSudoku1(char[][] board) { for(int i=0; i<9; i++) { Set<Character> row = new HashSet<Character>(); Set<Character> col = new HashSet<Character>(); Set<Character> cube = new HashSet<Character>(); for(int j=0; j<9; j++) { if(board[i][j] != '.') if(!row.add(board[i][j])) return false; if(board[j][i] != '.') if(!col.add(board[j][i])) return false; int RowIndex = 3*(i/3); int ColIndex = 3*(i%3); if(board[RowIndex + j/3][ColIndex + j%3] != '.') if(!cube.add(board[RowIndex+j/3][ColIndex + j%3])) return false; } } return true; }
2,使用数组存储。这种方法速度更快。
public boolean isValidSudoku(char[][] board) { int [] vset = new int [9]; int [] hset = new int [9]; int [] bckt = new int [9]; int idx = 0; for (int i = 0; i < 9; i++) { for (int j = 0; j < 9; j++) { if (board[i][j] != '.') { idx = 1 << (board[i][j] - '0') ; if ((hset[i] & idx) > 0 || (vset[j] & idx) > 0 || (bckt[(i / 3) * 3 + j / 3] & idx) > 0) return false; hset[i] |= idx; vset[j] |= idx; bckt[(i / 3) * 3 + j / 3] |= idx; } } } return true; }
相关文章推荐
- TLD Tracker
- 根据指定的图像路径和大小来获取缩略图
- android studio 使用常见问题
- <context-param>与<init-param>的区别与作用
- codeforces 691E Xor-sequences 矩阵快速幂
- 京东算法笔试
- 如何解决PHP里大量数据循环时内存耗尽的问题
- mybatis -spring 集成映射原理 --分析
- Android资源文件之创建与访问
- 切分 Tomcat 的 catalina.out 文件,解决日志文件过大的问题
- solr故障引起的应用不能显示
- 动态圈子功能优化分析
- 加密技术-des前后台加密
- 47. Permutations II
- Java中使用Jedis操作Redis
- 【poj3122】 Pie
- 发工资咯:)
- pageContext,request,session,application生命周期
- 身份证验证大全-javascript
- QQ会员AMS平台PHP7升级实践