[力扣题解]37. 解数独

题目:37. 解数独

思路

回溯法

代码

class Solution {
public:bool function(vector<vector<char>>& board){int i, j;char k;for(i = 0; i < 9; i++){for(j = 0; j < 9; j++){// 为空if(board[i][j] == '.'){for(k = '1'; k <= '9'; k++){if(right(board, i, j, k)){board[i][j] = k;if(function(board)){return true;}board[i][j] = '.';}}return false;}}}// 都填满了return true;}// 检验合法性bool right(vector<vector<char>>& board, int row, int col, char num){cout << "right start" << endl;int i, j;int start_i, start_j;// 行for(j = 0; j < 9; j++){if(j != col && board[row][j] == num){return false;}}// 列for(i = 0; i < 9; i++){if(i != row && board[i][col] == num){return false;}}// 九宫格start_i = (row / 3) * 3;start_j = (col / 3) * 3;for(i = start_i; i < start_i+3; i++){for(j = start_j; j < start_j+3; j++){if(!(i == row && j == col) && board[i][j] == num){return false;}}}return true;}void solveSudoku(vector<vector<char>>& board) {function(board);}
};

这里的回溯函数设计的很有趣,返回值为bool,所以没有特地写回溯结束的逻辑;
确定当前元素所在九宫格的位置时,用

start_i = (row / 3) * 3;
start_j = (col / 3) * 3;

来表示九宫格的起点坐标;

function()什么时候return

  • 对于一个为空的格子,9个数字都试完还不对,就return false
  • 如果所有格子都填满了,并且没有检查出错误,就return true
  • 发现当这个格子填好之后,整个棋盘也填好了,就return true

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/9774.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Oracle -在线回缩表

conn scott/tiger DROP TABLE EMP1 PURGE; CREATE TABLE EMP1 AS SELECT * FROM EMP; alter table emp1 enable row movement; -- 启动回缩特性 insert into emp1 select * from emp1; / / commit; -- 增加到14000行 -- 分析表的结构 analyze table emp1 comput…

小程序如何确定会员身份并批量设置会员积分或余额

因为一些原因&#xff0c;商家需要从其它系统里面批量导入会员&#xff0c;确定会员身份&#xff0c;然后给他们设置对应的账户余额。下面&#xff0c;就具体介绍如何进行这种操作。 一、客户进入小程序并绑定手机号 进入小程序&#xff1a;客户打开小程序&#xff0c;系统会自…

赶紧收藏!2024 年最常见 100道 Java 基础面试题(四十)

上一篇地址&#xff1a;赶紧收藏&#xff01;2024 年最常见 100道 Java 基础面试题&#xff08;三十九&#xff09;-CSDN博客 七十九、forward和redirect的区别&#xff1f; 在Java Web应用程序中&#xff0c;forward和redirect是两种不同的服务器端重定向机制&#xff0c;它…

【leetcode】栈题目总结

普通栈 先进后出的特点 ​​​​​​20. 有效的括号 class Solution { public:unordered_map<char, char> mp {{), (},{], [},{}, {}};bool isValid(string s) {stack<char> st;for (char c : s) {if (c ( || c [ || c {) {st.push(c);} else {if (!st.empty…

between函数为导致索引失效吗?

当BETWEEN函数用于WHERE条件时&#xff0c;索引可能会失效的情况是当被比较的列&#xff08;例如日期或数字列&#xff09;上存在索引&#xff0c;但是BETWEEN的范围涵盖了索引中的大部分数据。这会导致MySQL优化器放弃使用索引而选择全表扫描&#xff0c;因为对于优化器来说&a…

C++关联容器2——map,multimap,set,multiset基本操作

目录 关联容器操作 关联容器迭代器 set 的迭代器是const的 遍历关联容器 关联容器和算法 添加元素 向map添加元素 检测insert的返回值 向multiset或 multimap添加元素 std::multiset 例子 std::multimap 例子 删除元素 std::set 和 std::multiset 示例 std::map 和…

leetcode47-Permutations II

分析 给定一个可包含重复数字的序列 nums &#xff0c;按任意顺序 返回所有不重复的全排列。 示例 1&#xff1a; 输入&#xff1a;nums [1,1,2] 输出&#xff1a; [[1,1,2], [1,2,1], [2,1,1]] 题目 由于元素是重复的&#xff0c;要求返回不重复的&#xff0c;所以一定会有…

代码随想录算法训练营 总结篇

代码随想录算法训练营 总结篇 历时两个月的算法训练结束了&#xff01;首先恭喜我自己&#xff0c;中间虽然拖拉了几天&#xff0c;但总是补上了&#xff0c;也算是成功完成了训练。 虽然已经大三了&#xff0c;但是没有系统的刷过算法。之前在课上也是老师讲完就完了&#x…

交友软件源码-源码+搭建+售后,上线即可运营聊天交友源码 专业语聊交友app开发+源码搭建-快速上线

交友小程序源码是一种可以帮助开发者快速搭建交友类小程序的代码模板。它通常包括用户注册、登录、个人信息编辑、匹配推荐、好友聊天等常见功能&#xff0c;以及与后台数据交互的接口。使用这种源码可以极大地缩短开发时间&#xff0c;同时也可以根据自己的需求进行二次开发和…

从0到1开发一个vue3+ts项目(一)

1. 环境配置 1.1 安装node 使用官方安装程序 前往 Node.js 官网&#xff1a;访问 Node.js 官网&#xff0c;下载适合你操作系统的安装程序。运行安装程序&#xff1a;下载完成后&#xff0c;双击安装程序并按照提示进行安装。验证安装&#xff1a;安装完成后&#xff0c;在终…

一些有趣的Chrome命令行调用例子

Chrome浏览器支持多种命令行参数&#xff0c;这些参数可以用于定制浏览器行为或进行调试。以下是一些有趣的Chrome命令行调用例子&#xff1a; 以Kiosk模式启动Chrome: google-chrome --kiosk http://www.example.com 启动Chrome并禁用所有插件: google-chrome --disable-plug…

C++基础-编程练习题及答案

文章目录 前言一、查找“支撑数”二、数组元素的查找三、爬楼梯四、数字交换五、找高于平均分的人 前言 C基础-编程练习题和答案 一、查找“支撑数” 【试题描述】 在已知一组整数中&#xff0c; 有这样一种数非常怪&#xff0c; 它们不在第一个&#xff0c; 也不在最后一个&…

C++对象的拷贝构造函数

如果一个构造函数的第一个参数是类本身的引用,且没有其它参数(或者其它的参数都有默认值),则该构造函数为拷贝构造函数。 拷贝(复制)构造函数:利用同类对象构造一个新的对象 ●1.函数名和类同名 (构造函数) ●2.没有返回值 (构造函数) ●3.第一个参数必…

软考中级-软件设计师(九)数据库技术基础 考点最精简

一、基本概念 1.1数据库与数据库系统 数据&#xff1a;是数据库中存储的基本对象&#xff0c;是描述事物的符号记录 数据库&#xff08;DataBase&#xff0c;DB&#xff09;&#xff1a;是长期存储在计算机内、有组织、可共享的大量数据集合 数据库系统&#xff08;DataBas…

MySQL环境搭建

MySQL 环境搭建 一、卸载不需要的MySQL环境 #1.关闭服务 systemctl stop mysql #2.查找MySQL安装包&#xff0c;并删除 rpm -qa&#xff1b;xargs yum remove -y 二、获取MySQL官方yum源 http://repo.mysql.com/ 根据系统版本下载对应的文件&#xff1b;然后使用rz将文件传…

【C++】模拟实现string

文章目录 前言成员变量成员函数构造函数拷贝构造函数浅拷贝深拷贝拷贝构造函数实现 析构函数赋值重载 空间管理函数元素访问元素修改字符串运算流提取 & 流插入流提取流插入 迭代器begin & endrbegin & rend 总结 前言 模拟实现不是为了写得和库里面一样好。而是为…

OmniReader Pro mac激活版:智慧阅读新选择,开启高效学习之旅

在追求知识的道路上&#xff0c;一款优秀的阅读工具是不可或缺的。OmniReader Pro作为智慧阅读的新选择&#xff0c;以其独特的功能和卓越的性能&#xff0c;为您开启高效学习之旅。 OmniReader Pro具备高效的文本识别和处理技术&#xff0c;能够快速准确地提取文档中的关键信息…

《QT实用小工具·五十四》果冻弹出效果的动画按钮

1、概述 源码放在文章末尾 该项目实现动画按钮&#xff0c;鼠标放在按钮上可以弹性拉出的三个按钮&#xff0c;使用贝塞尔曲线实现&#xff0c;项目demo显示如下所示&#xff1a; 项目部分代码如下所示&#xff1a; #ifndef WATERCIRCLEBUTTON_H #define WATERCIRCLEBUTTON…

Day 43 1049. 最后一块石头的重量 II 494. 目标和 474.一和零

最后一块石头重量Ⅱ 有一堆石头&#xff0c;每块石头的重量都是正整数。 每一回合&#xff0c;从中选出任意两块石头&#xff0c;然后将它们一起粉碎。假设石头的重量分别为 x 和 y&#xff0c;且 x < y。那么粉碎的可能结果如下&#xff1a; 如果 x y&#xff0c;那么两…

Transformers中加载预训练模型的过程剖析

使用HuggingFace的Transformers库加载预训练模型来处理下游深度学习任务很是方便,然而加载预训练模型的方法多种多样且过程比较隐蔽,这在一定程度上会给人带来困惑。因此,本篇文章主要讲一下使用不同方法加载本地预训练模型的区别、加载预训练模型及其配置的过程,藉此做个记…