【DFS + backtrack】LeetCode 37. Sudoku Solver
LeetCode 37. Sudoku Solver
Solution1:
转载自花花酱:http://zxi.mytechroad.com/blog/searching/leetcode-37-sudoku-solver/
与之前的DFS套路题不大一样,注意!
class Solution {
public:void solveSudoku(vector<vector<char>>& board) {rows_ = vector<vector<int>>(9, vector<int>(10));cols_ = vector<vector<int>>(9, vector<int>(10));boxes_ = vector<vector<int>>(9, vector<int>(10));//预先设置剪枝条件for(int i = 0; i < 9; i++)for(int j = 0; j < 9; j++) {const char c = board[i][j]; if ( c != '.') {int n = c - '0'; int bx = i / 3;int by = j / 3;rows_[i][n] = 1;cols_[j][n] = 1;boxes_[bx * 3 + by][n] = 1;}}fill(board, 0, 0);}private:vector<vector<int>> rows_, cols_, boxes_;bool fill(vector<vector<char>>& board, int x, int y) {if (x == 9)return true;int ny = (y + 1) % 9;int nx = (ny == 0) ? x + 1 : x;if (board[x][y] != '.') return fill(board, nx, ny);for (int i = 1; i <= 9; i++) {int bx = x / 3;int by = y / 3;int box_key = bx * 3 + by;if (!rows_[x][i] && !cols_[y][i] && !boxes_[box_key][i]) {rows_[x][i] = 1;cols_[y][i] = 1;boxes_[box_key][i] = 1;board[x][y] = i + '0';if (fill(board, nx, ny)) return true;board[x][y] = '.';boxes_[box_key][i] = 0;cols_[y][i] = 0;rows_[x][i] = 0;}}return false;}
};
【DFS + backtrack】LeetCode 37. Sudoku Solver相关推荐
- 【DFS + backtrack】LeetCode 93. Restore IP Addresses
LeetCode 93. Restore IP Addresses Solution1:我的答案 怎么就这么慢... class Solution { public:vector<string& ...
- leetcode:面试题 08.12. 八皇后【dfs + backtrack】
分析 定义一个函数生成当前queens的结果 然后queens用来记录每行的queen分别在什么位置 backtrack用来记录当前第i行的queen的位置在哪 如果当前i = n就可以加入最终的结果 ...
- 【DFS + Backtracking】LeetCode 79. Word Search
LeetCode 79. Word Search Solution1:我的答案 DFS + Backtracking class Solution { public:bool exist(vector ...
- 【DFS + Backtracking】LeetCode 212. Word Search II
LeetCode 212. Word Search II Solution1:我的答案 暴力搜索..基于第79题的答案,真的是非常之慢啊!!! 快的方法均是基于字典树的方法,真是复杂.. class ...
- 【DFS + backtracking】LeetCode 216. Combination Sum III
Solution1:我的答案 DFS+backtracking,时间复杂度O(2m)=O(29)O(2m)=O(29)O(2^m)=O(2^9),空间复杂度O(k)O(k)O(k) class Sol ...
- [LeetCode 37] Sudoku Solver回溯解法
原题: Write a program to solve a Sudoku puzzle by filling the empty cells.Empty cells are indicated by ...
- leetcode 36. Valid Sudoku | 37. Sudoku Solver(数独)
36. Valid Sudoku https://leetcode.com/problems/valid-sudoku/ 题解 class Solution {public boolean isVal ...
- 【算法面试】leetcode最常见的150道前端面试题 --- 中等题
点击上方 前端瓶子君,关注公众号 回复算法,加入前端编程面试算法每日一题群 兄弟姐妹们,中等题来了,本篇17道,剩下63道,每周更新10道! 之前简单题的链接如下: [算法面试]leetcode最常见 ...
- 20天拿下华为OD笔试之【DFS/BFS】2023Q1A-开心消消乐【闭着眼睛学数理化】全网注释最详细分类最全的华为OD真题题解
[DFS/BFS]2023Q1A-开心消消乐 题目描述与示例 题目描述 给定一个 N 行 M 列的二维矩阵,矩阵中每个位置的数字取值为 0 或 1,矩阵示例如: 1 1 0 0 0 0 0 1 0 0 ...
最新文章
- Android Rect 的使用以及与RectF的区别
- 例5.12 输入一串字符,字符个数不超过100,且以.结束。 (信息学奥赛一本通)...
- 写一个简单的爬虫 - 如何模拟登录网站
- 第五周作业:瀑布模型
- 偷窥Selenium4 0带有网芯的相对定位器3 1
- 用Java实现并查集
- python身份证号判断_Python实现身份证号码解析
- SOLD2算法之3: 特征点与heatmap结合检测有效线段(CVPR 2021)
- 批量自定义裁剪多张图片,可以按固定像素值或比例批量裁剪图片
- python输入逗号_python中 逗号的 用法
- 盘点4种常用的推荐算法
- MySQL基础学习(三)————SQL语句的常用操作
- cad快速选择命令快捷键_CAD快捷键命令:倒角的使用技巧
- 基于中国剩余定理的秘密共享方案(miracl)
- Excel导入SqlServer2012提示“消息7314”
- Javaweb核心响应对象
- 第九届蓝桥杯 螺旋折线
- 解决bat批处理输出乱码的问题
- 莱斯大学计算机专业好不好,莱斯大学怎么样 莱斯大学优势专业
- 如何高效开发app?
热门文章
- 数据结构上机实践第八周项目9-广义表算法库及应用
- Java常用数据类和方法
- 主机连接wifi,如何设置虚拟机上网方式
- xp计算机重启记录,XP电脑关机后自动重启的解决方法
- java自动封箱_java自动封箱是什么意思
- python下列数据中不属于字符串的是_下列数据中,不属于字符串的是( )。 (6.0分)_学小易找答案...
- js return 闭包为null_那么如何让你的 JS 写得更漂亮?
- influxdb tsm文件_Influxdb中TSM文件结构解析之读写TSM
- Python数据结构与算法(附录)——块状链表的动态调整
- ubuntu安装redis_在Ubuntu上安装Redis