理解题目的意思后这题不难。扫描一遍数独输入并按照要求进行判断就可以了。提交了两次,第一次用了stl的set,第二次本来想借助位运算的,想想觉得有些操作略显麻烦,因此用整数数组代替。代码如下:

  解法一:

  

class Solution {
public:
bool isValidSudoku(vector<vector<char> > &board) {
set<char> rowSet;
set<char> colSets[];
set<char> subSets[];
set<char>::iterator itr;
char c;
for(int i=;i<;i++)
{
rowSet.clear();
for(int j=;j<;j++)
{
c=board[i][j];
if(c=='.')
{
continue;
}
else
{
if(rowSet.find(c)==rowSet.end())
{
rowSet.insert(c);
}
else
return false;
if(colSets[j].find(c)==colSets[j].end())
{
colSets[j].insert(c);
}
else
return false;
int idx=*(i/)+j/;
if(subSets[idx].find(c)==subSets[idx].end())
{
subSets[idx].insert(c);
}
else
return false;
}
}
}
return true;
}
};

  解法二:

  

class Solution {
public:
bool isValidSudoku(vector<vector<char> > &board) {
int rowMap[];
int colMaps[][];
int subMaps[][];
char c;
int iv;
int subIdx;
memset(colMaps,,sizeof(colMaps));
memset(subMaps,,sizeof(subMaps));
for(int i=;i<;i++)
{
memset(rowMap,,sizeof(rowMap));
for(int j=;j<;j++)
{
c=board[i][j];
if(c=='.')
continue;
iv=c-''-;
if(rowMap[iv]==)
return false;
rowMap[iv]=;
if(colMaps[j][iv]==)
return false;
colMaps[j][iv]=;
subIdx=(i/)*+j/;
if(subMaps[subIdx][iv]==)
return false;
subMaps[subIdx][iv]=;
}
}
return true;
}
};

  本质上来说解法一和解法二没有什么区别。但解法二是使用数组直接寻址,因此理论上来说效率应该更高。在使用解法二的过程中,代码一直不能AC,无奈只能一步一步调试,最终定位到"iv=c-'0'-1"这一行。原来是"iv=c-'0',但数独的输入其实是1-9,因此会越界,结果当然不对。这些细节问题,是自己粗心造成的,太不应该。

Valid Sudoku的更多相关文章

  1. LeetCode 36 Valid Sudoku

    Problem: Determine if a Sudoku is valid, according to: Sudoku Puzzles - The Rules. The Sudoku board ...

  2. 【leetcode】Valid Sudoku

    题目简述: Determine if a Sudoku is valid, according to: Sudoku Puzzles - The Rules. The Sudoku board cou ...

  3. Leetcode Valid Sudoku

    Determine if a Sudoku is valid, according to: Sudoku Puzzles - The Rules. The Sudoku board could be ...

  4. LeetCode:Valid Sudoku,Sudoku Solver(数独游戏)

    Valid Sudoku Determine if a Sudoku is valid, according to: Sudoku Puzzles - The Rules. The Sudoku bo ...

  5. leetcode36. Valid Sudoku

    Determine if a Sudoku is valid, according to: Sudoku Puzzles - The Rules. The Sudoku board could be ...

  6. 36. Valid Sudoku

    ============= Determine if a Sudoku is valid, according to: Sudoku Puzzles - The Rules. The Sudoku b ...

  7. 【LeetCode】36 - Valid Sudoku

    Determine if a Sudoku is valid, according to: Sudoku Puzzles - The Rules.(http://sudoku.com.au/TheRu ...

  8. Java [leetcode 36]Valid Sudoku

    题目描述: Determine if a Sudoku is valid, according to: Sudoku Puzzles - The Rules. The Sudoku board cou ...

  9. leetcode@ [36/37] Valid Sudoku / Sudoku Solver

    https://leetcode.com/problems/valid-sudoku/ Determine if a Sudoku is valid, according to: Sudoku Puz ...

  10. [Leetcode][Python]36: Valid Sudoku

    # -*- coding: utf8 -*-'''__author__ = 'dabay.wang@gmail.com' 36: Valid Sudokuhttps://oj.leetcode.com ...

随机推荐

  1. TI CC2541的红外控制

    整整一个礼拜, 整了...大约40个小时吧, 最少.. 下面是结果, 只能做一个delay延时.: unsigned char Time;unsigned char IrValue[6];#pragm ...

  2. 制作web字体:CSS3 @font-face

    @font-face是CSS3中的一个模块,他主要是把自己定义的Web字体嵌入到你的网页中,随着@font-face模块的出现,我们在Web的开发中使用字体不怕只能使用Web安全字体,另外@font- ...

  3. 挂载光盘与rpm安装

    光驱----光盘(系统光盘or资料) linux服务器上有光驱,也有光盘在里面,在系统那里去看内容 挂载,mount ls -l d--目录- 文件l 链接文件b 块设备文件 光驱文件的位置:/dev ...

  4. Oracle的select使用

    1.select : 语法: select [distinct] {*,column [alias],...} from table 注:[]括起来的内容代表可有可无 * 代表所有列 distinct ...

  5. 第四章· ucos系统及其任务

    来自为知笔记(Wiz)

  6. Trasformation中的公式报错误,错误数据行定位

    声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...

  7. FreeMarker常用语法

    转自:http://www.cnblogs.com/linjiqin/p/3388298.html FreeMarker的插值有如下两种类型:1,通用插值${expr};2,数字格式化插值:#{exp ...

  8. 《BI项目笔记》无法解密受保护的 XML 节点“DTS:Password” 解决办法

    说明: 无法解密受保护的 XML 节点“DTS:Password”,错误为 0x8009000B“该项不适于在指定状态下使用.”.可能您无权访问此信息.当发生加密错误时会出现此错误.请确保提供正确的密 ...

  9. TCP连接的状态与关闭方式及其对Server与Client的影响

    TCP连接的状态与关闭方式及其对Server与Client的影响 1. TCP连接的状态 首先介绍一下TCP连接建立与关闭过程中的状态.TCP连接过程是状态的转换,促使状态发生转换的因素包括用户调用. ...

  10. GIT warning: LF will be replaced by CRLF.

    git config --global core.autocrlf false git config --global core.autocrlf false