判断数独是否合法(LintCode)

判断数独是否合法

请判定一个数独是否有效。

该数独可能只填充了部分数字,其中缺少的数字用. 表示。

样例

下列就是一个合法数独的样例。

注意

一个合法的数独(仅部分填充)并不一定是可解的。我们仅需使填充的空格有效即可。

说明

什么是 数独

一开始认为会超时于是有了用空间换时间的想法于是出现如下代码。。

后来一想,应该不会超时把。。 不过这样代码其实也简单了很多。

总耗时: 1005 ms

 1 class Solution {
 2     /**
 3       * @param board: the board
 4         @return: wether the Sudoku is valid
 5       */
 6     public boolean isValidSudoku(char[][] board) {
 7         int r[][] = new int[9][9];
 8         int l[][] = new int[9][9];
 9         int a[][][] = new int[3][3][9];
10
11         for(int i=0;i<9;i++) {
12             for(int j=0;j<9;j++) {
13                 r[i][j] = 0;
14                 l[i][j] = 0;
15                 if(i < 3 && j < 3) {
16                     for(int k = 0; k<9; k++)
17                     a[i][j][k] = 0;
18                 }
19             }
20         }
21
22         for(int i=0;i<9;i++) {
23             for(int j=0;j<9;j++) {
24                 if(board[i][j] == ‘.‘) continue;
25                 int n = board[i][j] - ‘0‘;
26                 if(n < 0 || n > 9) return false;
27                 if(++r[i][n-1] > 1) return false;
28                 if(++l[j][n-1] > 1) return false;
29                 int x = i/3;
30                 int y = j/3;
31                 if(++a[x][y][n-1] > 1) return false;
32             }
33         }
34
35         return true;
36     }
37 };

时间: 2024-10-11 11:44:26

判断数独是否合法(LintCode)的相关文章

lintcode 容易题:Valid Sudoku 判断数独是否合法

题目: 判断数独是否合法 请判定一个数独是否有效.该数独可能只填充了部分数字,其中缺少的数字用 . 表示. 样例 下列就是一个合法数独的样例. 注意 一个合法的数独(仅部分填充)并不一定是可解的.我们仅需使填充的空格有效即可. 说明 什么是 数独? http://sudoku.com.au/TheRules.aspx http://baike.baidu.com/subview/961/10842669.htm 解题: 感觉这很难到不知道如何进行,在这里看到,只需判断每行,每类,每个小3*3矩阵

LintCode_389 判断数独是否合法

题目 请判定一个数独是否有效. 该数独可能只填充了部分数字,其中缺少的数字用 . 表示. 注意事项 一个合法的数独(仅部分填充)并不一定是可解的.我们仅需使填充的空格有效即可. 说明 什么是 数独? http://sudoku.com.au/TheRules.aspx http://baike.baidu.com/subview/961/10842669.htm 样例 下列就是一个合法数独的样例. C++代码 1 void clear(int *s, int n) 2 { 3 for(int i

判断身份证是否合法

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Common { public static class IdentityCardHelper { /// <summary> /// 1.判断身份证是否合法 /// 2.判断用户是否成年 /// </summary> /// <

华为在线测试题[基础篇]--判断IP是否合法

现在IPV4下用一个32位无符号整数来表示,一般用点分方式来显示,点将IP地址分成4个部分,每个部分为8位,表示成一个无符号整数(因此不需要用正号出现),如10.137.17.1,是我们非常熟悉的IP地址,一个IP地址串中没有空格出现(因为要表示成一个32数字). 现在需要你用程序来判断IP是否合法. //判断是否为合法IP #include<iostream> #include<string> #include<vector> using namespace std;

判断邮箱是否合法

/** * 验证输入的邮件地址是否合法 * * @access public * @param string $email 需要验证的邮件地址 * * @return bool */ function is_email($user_email) { $chars = "/^([a-z0-9+_]|\\-|\\.)[email protected](([a-z0-9_]|\\-)+\\.)+[a-z]{2,6}\$/i"; if (strpos($user_email, '@') !==

as3判断XML是否合法

XML是否合法 在我认为 XML的标签成对 并且根标签外边没有其他东西 以下是合法的 <?xml version="1.0" encoding="utf-8"?> <root><a/>cc</root> <root><a/>cc</root> 以下是我认为不合法的 ASDASDASDASD ASDASD<root><a/>cc</root> asd

LeetCode 98 Validate Binary Search Tree判断是否为合法二叉树

1 /** 2 * Definition for a binary tree node. 3 * struct TreeNode { 4 * int val; 5 * TreeNode *left; 6 * TreeNode *right; 7 * TreeNode(int x) : val(x), left(NULL), right(NULL) {} 8 * }; 9 */ 10 class Solution { 11 public: 12 bool Left(TreeNode* left,

java判断是否是合法IP

public boolean ipCheck(String text) { if (text != null && !text.isEmpty()) { // 定义正则表达式 String regex = "^(1\\d{2}|2[0-4]\\d|25[0-5]|[1-9]\\d|[1-9])\\." + "(1\\d{2}|2[0-4]\\d|25[0-5]|[1-9]\\d|\\d)\\." + "(1\\d{2}|2[0-4]\\d|

C语言,使用结构体读入两个在同一年的日期,判断日期是否合法,并计算两个日期之间相差的天数。结构体定义如下:

如下: typedef struct date { int year; int month; int day; }; 提示: 1. 使用如下函数完成相应功能 int isleapyear(int y); //计算是否为闰年 int islegal(Date x); //计算日期是否合法 int calcday(Date x);//计算日期是当年的第几天,用于计算两个日期之间天数的差值 2. 用于一维数组表示一年每月含有的天数 int dayofmonth[12] = {31,28,31,30,3