乘风破浪: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的更多相关文章

  1. 乘风破浪:LeetCode真题_037_Sudoku Solver

    乘风破浪:LeetCode真题_037_Sudoku Solver 一.前言 这次我们对于上次的模型做一个扩展并求解. 二.Sudoku Solver 2.1 问题 2.2 分析与解决     这道题 ...

  2. 乘风破浪:LeetCode真题_041_First Missing Positive

    乘风破浪:LeetCode真题_041_First Missing Positive 一.前言 这次的题目之所以说是难,其实还是在于对于某些空间和时间的限制. 二.First Missing Posi ...

  3. 乘风破浪:LeetCode真题_040_Combination Sum II

    乘风破浪:LeetCode真题_040_Combination Sum II 一.前言 这次和上次的区别是元素不能重复使用了,这也简单,每一次去掉使用过的元素即可. 二.Combination Sum ...

  4. 乘风破浪:LeetCode真题_039_Combination Sum

    乘风破浪:LeetCode真题_039_Combination Sum 一.前言     这一道题又是集合上面的问题,可以重复使用数字,来求得几个数之和等于目标. 二.Combination Sum ...

  5. 乘风破浪:LeetCode真题_038_Count and Say

    乘风破浪:LeetCode真题_038_Count and Say 一.前言     这一道题目,很类似于小学的问题,但是如果硬是要将输入和结果产生数值上的联系就会产生混乱了,因此我们要打破思维定势. ...

  6. 乘风破浪:LeetCode真题_035_Search Insert Position

    乘风破浪:LeetCode真题_035_Search Insert Position 一.前言 这次的问题比较简单,也没有限制时间复杂度,但是要注意一些细节上的问题. 二.Search Insert ...

  7. 乘风破浪:LeetCode真题_034_Find First and Last Position of Element in Sorted Array

    乘风破浪:LeetCode真题_034_Find First and Last Position of Element in Sorted Array 一.前言 这次我们还是要改造二分搜索,但是想法却 ...

  8. 乘风破浪:LeetCode真题_033_Search in Rotated Sorted Array

    乘风破浪:LeetCode真题_033_Search in Rotated Sorted Array 一.前言     将传统的问题进行一些稍微的变形,这个时候我们可能无所适从了,因此还是实践出真知, ...

  9. 乘风破浪:LeetCode真题_032_Longest Valid Parentheses

    乘风破浪:LeetCode真题_032_Longest Valid Parentheses 一.前言 这也是非常有意思的一个题目,我们之前已经遇到过两个这种括号的题目了,基本上都要用到堆栈来解决,这次 ...

随机推荐

  1. Quart2D setNeedsDisplay

    #import "myview.h" @interface myview () @property(nonatomic,assign) float imageY; @end @im ...

  2. Java SDK夯住(Hang)问题排查

    夯住(Hang)是指程序仍在运行,卡在某个方法调用上,没有返回也没有异常抛出:卡住时间从几秒到几小时不等. Java程序发生Hang时,应该首先使用 jstack 把java进程的堆栈信息保存下来 , ...

  3. Java maven项目的小随笔

    1.web.xml里面有filter拦截设置,注意. 2.编译之后,网页中读取资源的路径是apache-tomcat/wtpwebapps/..,若该路径下没有相应资源,则报404错误.

  4. 并发编程之 Java 三把锁

    前言 今天我们继续学习并发.在之前我们学习了 JMM 的知识,知道了在并发编程中,为了保证线程的安全性,需要保证线程的原子性,可见性,有序性.其中,synchronized 高频出现,因为他既保证了原 ...

  5. OAuth2.0的理解&基础

    此文章是复制黏贴网上文章的,主要做自己备用着看(也加了自己的一点见解),喜欢的读者也可以看. OAuth是一个关于授权(authorization)的开放网络标准,在全世界得到广泛应用,目前的版本是2 ...

  6. ASP.NET MVC呼叫WCF Service的方法

    本演示,Insus.NET操练asp.net mvc的应用程序,虽然以前有写过:<MVC应用程序使用Wcf Service>http://www.cnblogs.com/insus/p/3 ...

  7. MVC应用程序显示上传的图片(续)

    上一篇<MVC应用程序显示上传的图片>http://www.cnblogs.com/insus/p/3597543.html 最后有提及没有实现用户点击图片,显示原图的功能.此篇Insus ...

  8. C#微信小程序服务端获取用户解密信息

    using AIOWeb.Models; using Newtonsoft.Json; using Newtonsoft.Json.Linq; using System; using System.C ...

  9. C#网络爬虫--多线程处理强化版

    上次做了一个帮公司妹子做了爬虫,不是很精致,这次公司项目里要用到,于是有做了一番修改,功能添加了网址图片采集,下载,线程处理界面网址图片下载等. 说说思路:首相获取初始网址的所有内容 在初始网址采集图 ...

  10. 【Java并发编程】2、无锁编程:lock-free原理;CAS;ABA问题

    转自:http://blog.csdn.net/kangroger/article/details/47867269 定义 无锁编程是指在不使用锁的情况下,在多线程环境下实现多变量的同步.即在没有线程 ...