70. Valid Sudoku
来源:互联网 发布:索罗斯期货软件 编辑:程序博客网 时间:2024/04/29 19:06
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.
分析:题目要求是分析给定的二维数组是否为可解的数独棋盘。这就要求:1.每行出现的1-9的数字不能重复;2.每列出现的1-9的数字不能重复;3.每宫内出现的1-9的数字不能重复。
/** 符合条件的数独是满足每一行、每一列、每一个粗线宫内的数字均含1-9,不重复。 * 判断一个目前的数独是否可解,只需要满足每一行、每一列和每一个宫内的元素不重复即可。 */public boolean isValidSudoku(char[][] board) {Set rowSet = new HashSet();/* 当前行集合 */Set columnSet = new HashSet();/* 当前列集合 *//*Step1:先判断某行某列是否不重复*/for (int i = 0; i < 9; i++) {for (int j = 0; j < 9; j++) {if (board[i][j] != '.') {if (rowSet.contains(board[i][j])) {/* 包含重复元素则返回false */return false;} else {rowSet.add(board[i][j]);}}if (board[j][i] != '.') {if (columnSet.contains(board[j][i])) {return false;} else {columnSet.add(board[j][i]);}}}/* 如果需要继续下一个循环的话,则应该清空这两个集合 */rowSet.clear();columnSet.clear();}Set roomSet = new HashSet();/* 当前行集合 *//*Step2:判断每个宫内元素是否不重复*/for(int i=0;i<9;i=i+3){for(int j = 0;j<9;j=j+3){for(int row=i;row<i+3;row++){for(int col=j;col<j+3;col++){if (board[row][col] != '.') {if (roomSet.contains(board[row][col])) {/* 包含重复元素则返回false */return false;} else {roomSet.add(board[row][col]);}}}}roomSet.clear();//计算下一宫的元素之前,把这一个宫内的元素清0}}return true;}
0 0
- 70. Valid Sudoku
- Valid Sudoku
- Valid Sudoku
- Valid Sudoku
- Valid Sudoku
- Valid Sudoku
- Valid Sudoku
- Valid Sudoku
- Valid Sudoku
- Valid Sudoku
- Valid sudoku
- Valid Sudoku
- Valid Sudoku
- Valid Sudoku
- Valid Sudoku
- Valid Sudoku
- Valid Sudoku
- Valid Sudoku
- The Egg-Drop Problem
- LeetCode Best Time to Buy and Sell Stock(dp)
- RT-Thread的线程(任务)处理【RT-Thread学习笔记 2】
- linux命令学习之(tail)
- 【3-1】MapReduce原理
- 70. Valid Sudoku
- VS2010快捷键大全
- Visio2010建立ER图并直接导出为SQL语句 .
- spring+dwr
- 汇编中一些标志位的含义
- TS流讲解--什么是ts流
- TabLayout+Fragment+ViewPager+FragmentStatePagerAdapter实现Tab标签
- LeetCode:Minimum Path Sum
- VS 2012 标配 Asp.net MVC 和 Entity Framework - mybatisnet 可能就显得路子野 了