LeetCode-36. Valid Sudoku
来源:互联网 发布:喜马拉雅mac版 编辑:程序博客网 时间:2024/06/01 10:03
一、问题描述
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'.'
.
二、问题思路
检查每行每列,以及独立的九宫格是否包含重复的元素。
本题主要的难点在于九宫格重复元素的查找,如果将整个网格划分为上左,上中,上右;中左,中中,中右;下左,下中,下右九个块。
首先考虑上左块,j从0-9,横坐标是每隔3个加1,纵坐标是0-1-2三个数的循环,因此,容易想到横坐标是 j/3;纵坐标是j%3.
然后考虑上中块,发现上中块的横坐标与上左块对应位置的横坐标完全无变化,同理上右块;而中块横坐标比上块对应位置的增加3,下块横坐标比上块对应位置增加6,因此,可以推得横坐标的计算公式为(i/3)*3+j/3。上中块的纵坐标比上左块对应位置增加3,上右块比上左块增加6,而左三块,对应位置的纵坐标完全相等,同理中三块,右三块,可以推得纵坐标的计算公式为(i%3)*3+j%3
三\代码如下
public class Solution { public boolean isValidSudoku(char[][] board) { for(int i=0;i<9;i++){ HashSet<Character> rows=new HashSet<Character>(); HashSet<Character> cloumns=new HashSet<Character>(); HashSet<Character> cube=new HashSet<Character>(); for(int j=0;j<9;j++){ if(board[i][j]!='.' && !rows.add(board[i][j])) return false; if(board[j][i]!='.' && !cloumns.add(board[j][i])) return false; int rowindex=3*(i/3)+j/3; int cloindex=3*(i%3)+j%3; if(board[rowindex][cloindex]!='.' && !cube.add(board[rowindex][cloindex])) return false; } } return true; }}
0 0
- [LeetCode]36.Valid Sudoku
- LeetCode --- 36. Valid Sudoku
- LeetCode 36.Valid Sudoku
- [Leetcode] 36. Valid Sudoku
- 【leetcode】36. Valid Sudoku
- [leetcode] 36. Valid Sudoku
- Leetcode 36. Valid Sudoku
- 36. Valid Sudoku LeetCode
- leetcode 36. Valid Sudoku
- LeetCode *** 36. Valid Sudoku
- leetcode 36. Valid Sudoku
- [LeetCode]36. Valid Sudoku
- LeetCode 36. Valid Sudoku
- leetcode-36. Valid Sudoku
- 36.[Leetcode]Valid Sudoku
- Leetcode 36.Valid Sudoku
- LeetCode-36.Valid Sudoku
- leetcode 36. Valid Sudoku
- 网络编程学习笔记整理(二)
- python进阶10:__future__
- iOS 获取手机sim卡的运营商(移动,电信,联通) 相关信息
- jQuery选择器 含有特殊符号和含有空格的注意事项
- 关于nodejs 假设httpserver,会发现一次网页打开,服务端会响应两次的问题;
- LeetCode-36. Valid Sudoku
- 5-6 PAT排名汇总 (25分)
- Android 简谈安全那点事
- source folder、package、folder互相转换
- 软件工程(一)
- myeclipse新建项目中没有dynamatic
- 第六章 Spring Profile
- RAID重组和数据库数据的修复与验证过程小记
- HPUOJ---2017寒假作业--专题0/D-EXCEL排序