乘风破浪:LeetCode真题_036_Valid Sudoku
乘风破浪:LeetCode真题_036_Valid Sudoku
一、前言
有的时候对于一些基础知识的掌握,对我们是至关重要的,比如ASCII重要字符的表示,比如一些基本类型的长度。
二、Valid Sudoku
2.1 问题
2.2 分析与解决
这样的问题可以说是比较简单了,我们只需要简单的按照规则进行检测就能得到相应的结果了,但是有没有更好一点的方法呢?我想应该是没有了。
public class Solution {
/**
* 题目大意
* 验证一个数独棋盘是否合法,数独棋盘的验证规则见链接对应的页面。
* 数独棋盘是部分填满的,空的位置使用点来代替。
* 注意:合法的棋盘不一定要求的可解的,只要填充的数字满足要求就可以。
*
* 解题思路
* 先对行进行检查,再对列进行检查,最后检查3*3的方格。
*/
public boolean isValidSudoku(char[][] board) {
// .的ASCII值是46,0的ASCII值是48,/的ASCII值是47
int number = board[0].length;
int[] record = new int[10 + 2]; //保存.到9的值,保存数据的位置在[3, 11]
boolean isValid;
reset(record); // 对行进行检查
for (int i = 0; i < number; i++) {
for (int j = 0; j < number; j++) {
record[board[i][j] - '.']++;
} if (!check(record)) { // 如是检查失败
return false;
} else { // 检查成功重置棋盘
reset(record);
}
} // 对列进行检查
for (int i = 0; i < number; i++) {
for (int j = 0; j < number; j++) {
record[board[j][i] - '.']++;
} if (!check(record)) { // 如是检查失败
return false;
} else { // 检查成功重置棋盘
reset(record);
}
} // 检查3*3方块
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) { for (int k = i * 3; k < (i + 1) * 3; k++) {
for (int l = j * 3; l < (j + 1) * 3; l++) {
record[board[k][l] - '.']++;
}
} if (!check(record)) { // 如是检查失败
return false;
} else { // 检查成功重置棋盘
reset(record);
}
}
}
return true;
} private void reset(int[] a) {
for (int i = 0; i < a.length; i++) {
a[i] = 0;
}
} /**
* 检查棋盘一行,一列,或者3*3的方格是否合法,如果1-9中的数字个数大于1就不合法
*
* @param a 验证数字
* @return 返回结果
*/
private boolean check(int[] a) {
for (int i = 3; i < a.length; i++) {
if (a[i] > 1) {
return false;
}
}
return true;
}
}
三、总结
这道题不难,重要的在于我们记得ASCII中点号的数值和数字的数值。
乘风破浪:LeetCode真题_036_Valid Sudoku的更多相关文章
- 乘风破浪:LeetCode真题_037_Sudoku Solver
乘风破浪:LeetCode真题_037_Sudoku Solver 一.前言 这次我们对于上次的模型做一个扩展并求解. 二.Sudoku Solver 2.1 问题 2.2 分析与解决 这道题 ...
- 乘风破浪:LeetCode真题_041_First Missing Positive
乘风破浪:LeetCode真题_041_First Missing Positive 一.前言 这次的题目之所以说是难,其实还是在于对于某些空间和时间的限制. 二.First Missing Posi ...
- 乘风破浪:LeetCode真题_040_Combination Sum II
乘风破浪:LeetCode真题_040_Combination Sum II 一.前言 这次和上次的区别是元素不能重复使用了,这也简单,每一次去掉使用过的元素即可. 二.Combination Sum ...
- 乘风破浪:LeetCode真题_039_Combination Sum
乘风破浪:LeetCode真题_039_Combination Sum 一.前言 这一道题又是集合上面的问题,可以重复使用数字,来求得几个数之和等于目标. 二.Combination Sum ...
- 乘风破浪:LeetCode真题_038_Count and Say
乘风破浪:LeetCode真题_038_Count and Say 一.前言 这一道题目,很类似于小学的问题,但是如果硬是要将输入和结果产生数值上的联系就会产生混乱了,因此我们要打破思维定势. ...
- 乘风破浪:LeetCode真题_035_Search Insert Position
乘风破浪:LeetCode真题_035_Search Insert Position 一.前言 这次的问题比较简单,也没有限制时间复杂度,但是要注意一些细节上的问题. 二.Search Insert ...
- 乘风破浪:LeetCode真题_034_Find First and Last Position of Element in Sorted Array
乘风破浪:LeetCode真题_034_Find First and Last Position of Element in Sorted Array 一.前言 这次我们还是要改造二分搜索,但是想法却 ...
- 乘风破浪:LeetCode真题_033_Search in Rotated Sorted Array
乘风破浪:LeetCode真题_033_Search in Rotated Sorted Array 一.前言 将传统的问题进行一些稍微的变形,这个时候我们可能无所适从了,因此还是实践出真知, ...
- 乘风破浪:LeetCode真题_032_Longest Valid Parentheses
乘风破浪:LeetCode真题_032_Longest Valid Parentheses 一.前言 这也是非常有意思的一个题目,我们之前已经遇到过两个这种括号的题目了,基本上都要用到堆栈来解决,这次 ...
随机推荐
- 在MVC应用程序中,怎样删除上传的文件
在ASP.NET MVC应用程序中,怎样删除上传的文件. 由于上传时,真正文件是存储在应用程序某一目录,在数据库表中,只是存储其基本信息.在删除时,需要注意一下,由于没有事务可操作.Insus.NET ...
- Linux中用HttpWebRequest或WebClient访问远程https路径
要想在Linux中用HttpWebRequest或WebClient访问远程https路径,需要作如下处理: 1,更新linux根证书(只需一次,在安装mono或安装jexus独立版后执行) sudo ...
- 2017.12.21-JQuery
作业:密码加强验证 <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> & ...
- Java基础——Servlet(一)
在学习Servlet之前,需要首先学习一些关联性的知识. 一.动态网页程序 动态网页:它是网页中的偏功能性的部分也是最重要的部分.它不是我们平时所看见的页面特效,展示的效果.而是,一种交互行为.比如, ...
- Mybatis中trim标签的用法
select * from t_user <trim prefix="WHERE" prefixOverrides="and"> <if te ...
- Java static和final
java提高篇(七)-----关键字static static 在Java中并不存在全局变量的概念,但是我们可以通过static来实现一个“伪全局”的概念,在Java中static表示“全局”或者“静 ...
- Django中连接redis
1. 安装 pip install django-redis 2. settings中配置 CACHES = { "default": { "BACKEND": ...
- django-xss攻击原理与防范
一.跨站脚本攻击(XSS) XSS是一种经常出现在web应用中的计算机安全漏洞,它允许恶意web用户将代码植入到提供给其它用户使用的页面中.也属一种注入攻击,注入本质上就是把输入的数据变成可执行的程序 ...
- SPOJ4580 ABCDEF(meet in the middle)
题意 题目链接 Sol 发现abcdef是互不相关的 那么meet in the middle一下.先算出abc的,再算def的 注意d = 0的时候不合法(害我wa了两发..) #include&l ...
- DOM的查找,新增,删除操作
查找 1. document.getElementById() 通过ID获取元素,由于ID唯一,所以获取的是一个元素 2. document.getElementsByTagName() 通过标签名 ...