理解题目的意思后这题不难。扫描一遍数独输入并按照要求进行判断就可以了。提交了两次,第一次用了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. python的一些图像操作

    from PIL import ImageGrabim = ImageGrab.grab()im.save("f:\\T.jpg",'jpeg')   直接用pyCharm安装PI ...

  2. 如何用css做一个细虚线边框表格

    <style type="text/css"> <!-- .dashed_tbl { border-top: 1px dashed #333333; border ...

  3. Android中AIDL通信机制分析

    一.背景 ·1.AIDL出现的原因 在android系统中,每一个程序都是运行在自己的进程中,进程之间无法进行通讯,为了在Android平台,一个进程通常不能访问另一个进程的内存空间,所以要想对话,需 ...

  4. 精彩的解释CAP理论的文章

    强一致性(Consistency):  更新操作成功并返回客户端完成后,分布式的所有节点在同一时间的数据完全一致. 可用性(Availability):读和写操作都能成功. 分区容错性(Partiti ...

  5. ionic 总结

    希望大家都能有了好东西分享出来,单单就ionic来说,我是刚接触,现在用的人不是很多. 我认为如果大家能 有了好的东西或者好的方案 不藏着掖着,分享出来,那么我们的社区会更加活跃,用的人会越来越多,解 ...

  6. GMF:如何让网格显示在background,而不是foreground

    前言 很久没写文章了,准备写一系列关于Eclipse RCP /Plugin的文章. 这些文章都是trouble shooting性质的,不准备写的很细,当你碰到这样的问题,google到时,能帮你把 ...

  7. Json概述以及python对json的相关操作(转)

    什么是json: JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.易于人阅读和编写.同时也易于机器解析和生成.它基于JavaScript Programm ...

  8. Ubuntu+Win7双系统grub的修复问题

    最近,在grub引导的Ubuntu+Win7双系统上作业,用的是Ubuntu14.04.2.进行系统更新,更新到一般卡住了,恰好此时在进行grub相关文件的更新,我把机器重启后进入了grub resc ...

  9. iOS开发数据库篇—SQL代码应用示例

    iOS开发数据库篇—SQL代码应用示例 一.使用代码的方式批量添加(导入)数据到数据库中 1.执行SQL语句在数据库中添加一条信息 插入一条数据的sql语句: 点击run执行语句之后,刷新数据 2.在 ...

  10. [hdu1394]Minimum Inversion Number(树状数组)

    Minimum Inversion Number Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java ...