Valid Sudoku
理解题目的意思后这题不难。扫描一遍数独输入并按照要求进行判断就可以了。提交了两次,第一次用了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的更多相关文章
- LeetCode 36 Valid Sudoku
Problem: Determine if a Sudoku is valid, according to: Sudoku Puzzles - The Rules. The Sudoku board ...
- 【leetcode】Valid Sudoku
题目简述: Determine if a Sudoku is valid, according to: Sudoku Puzzles - The Rules. The Sudoku board cou ...
- Leetcode Valid Sudoku
Determine if a Sudoku is valid, according to: Sudoku Puzzles - The Rules. The Sudoku board could be ...
- LeetCode:Valid Sudoku,Sudoku Solver(数独游戏)
Valid Sudoku Determine if a Sudoku is valid, according to: Sudoku Puzzles - The Rules. The Sudoku bo ...
- leetcode36. Valid Sudoku
Determine if a Sudoku is valid, according to: Sudoku Puzzles - The Rules. The Sudoku board could be ...
- 36. Valid Sudoku
============= Determine if a Sudoku is valid, according to: Sudoku Puzzles - The Rules. The Sudoku b ...
- 【LeetCode】36 - Valid Sudoku
Determine if a Sudoku is valid, according to: Sudoku Puzzles - The Rules.(http://sudoku.com.au/TheRu ...
- Java [leetcode 36]Valid Sudoku
题目描述: Determine if a Sudoku is valid, according to: Sudoku Puzzles - The Rules. The Sudoku board cou ...
- leetcode@ [36/37] Valid Sudoku / Sudoku Solver
https://leetcode.com/problems/valid-sudoku/ Determine if a Sudoku is valid, according to: Sudoku Puz ...
- [Leetcode][Python]36: Valid Sudoku
# -*- coding: utf8 -*-'''__author__ = 'dabay.wang@gmail.com' 36: Valid Sudokuhttps://oj.leetcode.com ...
随机推荐
- ECMAScript 6教程 (一)
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出 原文连接,博客地址为 http://www.cnblogs.com/jasonnode/ .该系列课程是 ...
- #if、#ifdef、#if defined之间的区别【转】
转自:http://quanminchaoren.iteye.com/blog/1870977 #if的使用说明 #if的后面接的是表达式 #if (MAX==10)||(MAX==20) code. ...
- WordPress实现登录或退出后直接跳转到首页的方法
现在Wordpress是登录之后跳回到我们上次查看的页面,那么要如何修改它登录之后直接跳回到首页呢,这里就来给给大家详细介绍一下解决方法. 首先定位到登录链接所在位置,你会看到类似下面的代码: 复制代 ...
- php缓冲区 sapi缓冲区
<?php#设置php.ini中output_buffering = 32#使用apache可以看到效果 #nginx+php-fpm看不到效果 nginx缓存 sockets通信问题?#imp ...
- [转]关于 initWithNibName 和 loadNibNamed 的区别和联系
转载地址:http://jianyu996.blog.163.com/blog/static/1121145552012102293653906/ 关于 initWithNibName 和 loadN ...
- zigbee学习之路(五):定时器1(查询方式)
一.前言 今天,我们来学习几乎所有单片机都有的功能,定时器的使用,定时器对单片机来说是相当重要的,有了它,单片机就可以进行一些复杂的工作. 二.原理与分析 谈到定时器的控制,我们最先想到的是要给它赋初 ...
- 执行大量的Redis命令,担心效率问题?用Pipelining试试吧~
参考的优秀文章 Request/Response protocols and RTT 来源 原来,系统中一个树结构的数据来源是Redis,由于数据增多.业务复杂,查询速度并不快.究其原因,是单次查询的 ...
- 【Unity】常用代码
//父子节点相关的: parent 变量表示Transform的父节点 root 表示它的根节点,如果没有父节点,它会返回自己 //根据名字查找子节点 Transform Find(string na ...
- IE7下总提示" 缺少标识符、字符串或数字"
用Jquery easyUI ,IE7下列表显示不了,总提示缺少标识符.字符串或数字.而google,maxthon,firefox,IE10等却没有问题. 原因是Json末尾多了个逗号.IE7下js ...
- OSG开发概览
1 OSG基础知识 Ø OSG是Open Scene Graphic 的缩写,OSG于1997年诞生于以为滑翔机爱好者之手,Don burns 为了对滑翔机的飞行进行模拟,对openGL的库进行了封 ...