leetcode第一刷_Sudoku Solver
这道题简直是耻辱啊。竟然被吓得不敢做,最终開始写还犯下了各种低级错误,花了好久的时间。
事实上假设想明确81*9事实上是非常小的规模的话,早就想到用回溯法了,这不是跟八皇后全然一样的嘛。每次填入的时候,验证一下合不合理,当中合不合理在上一个问题中已经讨论过了。对当前位置讨论更简单。
所的头头是道。你会问“那你是错在哪呢?”你猜啊。我在推断一个小方格时候合理时,走了非常多弯路。一開始想的是用循环和减法。找到当前位置所在的小方格最左上角的位置。事实上全然不用啊亲。当听到实验室的同学说3*(i/3)和3*(j/3)直接就是时。我眼泪都掉下来了。蠢爆了。还有。在推断board上的字符等不等于当前字符p时,我竟然写出了board[i][j]=='p'这样的惊天地泣鬼神的代码,给自己跪了。p传进去的就是字符格式了,在数独的棋盘上到哪找等于‘p’的位置啊。
。
class Solution {
public:
int MAX = 9;
bool flag = false;
bool isValide(vector<vector<char> > &board, char p, int i, int j){
for(int k=0;k<MAX;k++){
if(board[i][k] == '.') continue;
if(k!=j&&board[i][k] == p)
return false;
}
for(int k=0;k<MAX;k++){
if(board[k][j] == '.') continue;
if(k!=i&&board[k][j] == p)
return false;
}
int refi = 3*(i/3), refj = 3*(j/3);
for(int m=refi;m<refi+3;m++){
for(int n=refj;n<refj+3;n++){
if(m==i && n==j) continue;
if(board[m][n] == '.') continue;
if(board[m][n] == p)
return false;
}
}
return true;
}
void fileSudo(vector<vector<char> > &board, int pos){
if(pos == 81) {flag = true; return;}
int i=pos/MAX, j=pos%MAX;
if(isdigit(board[i][j])){
fileSudo(board, pos+1);
}else{
for(char p='1';p<='9';p++){
//cout<<i<<" "<<j<<" "<<p<<endl;
if(isValide(board, p, i, j)){
board[i][j] = p;
//cout<<"nice p:"<<p<<endl;
fileSudo(board, pos+1);
if(flag) return;
}
}
board[i][j] = '.';
}
}
void solveSudoku(vector<vector<char> > &board) {
fileSudo(board, 0);
}
};leetcode第一刷_Sudoku Solver的更多相关文章
- leetcode第一刷_Set Matrix Zeroes
这个题乍一看非常easy,实际上还挺有技巧的.我最開始的想法是找一个特殊值标记.遇到一个0,把他所相应的行列中非零的元素标记成这个特殊值.0值保持不变,然后再从头遍历一次,碰到特殊值就转化成0. 问题 ...
- leetcode第一刷_Permutations II
当有反复元素的时候呢? 不用拍脑袋都会想到一种方法,也是全部有反复元素时的通用处理方法,维护一个set,假设这个元素没增加过就增加,增加过了的忽略掉.可是,在这道题上这个通用方法竟然超时了! 怎么办? ...
- leetcode第一刷_Populating Next Right Pointers in Each Node II
很自然的推广,假设去掉全然二叉树的条件呢?由于这个条件不是关键,因此不会影响整体的思路.做法依旧是每次找到一层的起点,然后一层一层的走. 假设是全然二叉树的话,每层的起点就是上一层起点的左孩子,兄弟之 ...
- leetcode第一刷_Merge Intervals
看到这个题我就伤心啊,去微软面试的时候,第一个面试官让我做的题目就是实现集合的交操作,这个集合中的元素就像这里的interval一样.是一段一段的.当时写的那叫一个慘不忍睹.最后果然被拒掉了. .好好 ...
- leetcode第一刷_N-Queens
八皇后问题应该是回溯法的教学典范.在本科的时候,有一门课叫面向对象.最后的附录有这个问题的源码.当时根本不懂编程,照抄下来,执行一下出了结果都非常开心,哎. 皇后们的限制条件是不能同行同列,也不能同对 ...
- leetcode第一刷_Gray Code
说到格雷码,应该没人不知道,详细它有什么用,我还真不是非常清楚,我室友应该是专家.生成的规律不是非常明显,之前看到帖子讲的,这会儿找找不到了.. 思想是这种,假设有n位,在第2^(n-1)个编码以下画 ...
- leetcode第一刷_Combination Sum Combination Sum II
啊啊啊啊.好怀念这样的用递归保存路径然后打印出来的题目啊.好久没遇到了. 分了两种,一种是能够反复使用数组中数字的,一种是每一个数字仅仅能用一次的.事实上没有多大差别,第一种每次进入递归的时候都要从头 ...
- leetcode第一刷_Count and Say
水题. 描写叙述的还挺麻烦的,实际上就是纸老虎,用两个string,一个存上一轮的结果,一个用来更新出这一轮的结果,每次扫描上一轮,统计一个字符出现的次数,然后把这个次数和字符增加到这一轮的字符串中就 ...
- leetcode第一刷_Jump Game
这个题事实上非常easy的,我一開始想复杂了,它没要求记录路径,事实上仅仅要看一下每一步之后所能延伸到的最远的位置就能够了,在这一个最远位置前面的那些位置,都是能够到达的,假设扫到了某个i,它大于当前 ...
随机推荐
- Selenium2+python自动化61-Chrome浏览器(chromedriver)【转载】
前言 selenium2启动Chrome浏览器是需要安装驱动包的,但是不同的Chrome浏览器版本号,对应的驱动文件版本号又不一样,如果版本号不匹配,是没法启动起来的. 一.Chrome遇到问题 1. ...
- 安装XHProf分析PHP性能瓶颈(原创)
废话不多说,直接上代码 ,手动滑稽.o(╯□╰)o 如果已解决您的问题,请在文章底部点击下关注,非常感谢. 下面是LINUX命令行 $ wget http://pecl.php.net/get/x ...
- 错误 NETSDK1068: 框架依赖型应用程序主机需要一个至少 “netcoreapp2.1” 的目标框架
错误 NETSDK1068: 框架依赖型应用程序主机需要一个至少 “netcoreapp2.1” 的目标框架 我有一个ASP.NET Core 2网站应用程序,编译运行都没有问题,但是发布时却出了错, ...
- 阿里云ECS(Centos7.2 64bit)安装Docker
购买了阿里云的ECS服务器后,一直在尝试安装Docker,使用过Ubuntu和CentOS系统,也一直在查找文档,但都是Docker安装完成后却无法访问,一直在ECS上不停的更换系统盘 再次按官方文档 ...
- NetTcpBinding 类nettcpbinding的属性和方法
一种适合于跨计算机通信的安全可靠的绑定. 继承层次结构 System.Object System.ServiceModel.Channels.Binding System.Servi ...
- The 15th Zhejiang Provincial Collegiate Programming Contest Sponsored by TuSimple -A Peak
Peak Time Limit: 1 Second Memory Limit: 65536 KB A sequence of integers is called a peak, if ...
- Codeforces 1039A. Timetable
题目地址:http://codeforces.com/problemset/problem/1039/A 题目的关键在于理清楚思路,然后代码就比较容易写了 对于每一个位置的bus,即对于每一个i(i& ...
- 初识.NET Core
dotnet new console dotnet new web dotnet new webapi dotnet run dotnet build -r win-x64 dotnet publis ...
- 转 IntelliJ IDEA 快捷键
https://www.cnblogs.com/clwydjgs/p/9390488.html 一.视图查看 Ctrl+F12 查看file,method结构图.类继承机构图 (不知道方法结构,Ctr ...
- [CF407E]k-d-sequence
题意:给定$a_{1\cdots n}$,让你求出一个最长的子串$a_{l\cdots r}$,使得这个子串加上最多$k$个数字并排序后是一个公差为$d$的等差数列 首先$d=0$就是最长连续相等段, ...