剑指offer12 矩阵中的路径 13 机器人的运动范围 34.二叉树中和为某一值得路径

class Solution {
public:bool exist(vector<vector<char>>& board, string word) {int row=board.size(),col=board[0].size();int index=0,i=0,j=0;if(word.size()>row*col) return 0;//vector<vector<int>> visit[row][col];//标记当前位置有没有被访问过vector<vector<int>> visit(row,vector<int>(col));bool flag=1;while(i<row&j<col){cout<<"board[i][j]: "<<board[i][j]<<endl;if(board[i][j]==word[index]){flag=1;if(index==word.size()-1) return 1;cout<<word[index]<<endl;index++;visit[i][j]=1;if(i-1>=0&&board[i-1][j]==word[index]&&visit[i-1][j]!=1){cout<<"上"<<endl;i=i-1;j=j;}else if(i+1<row&&board[i+1][j]==word[index]&&visit[i+1][j]!=1){cout<<"下"<<endl;i=i+1;j=j;}else if(j-1>=0&&board[i][j-1]==word[index]&&visit[i][j-1]!=1){cout<<"左"<<endl;i=i;j=j-1;}else if(j+1<col&&board[i][j+1]==word[index]&&visit[i][j+1]!=1){cout<<"右"<<endl;i=i;j=j+1;}}else {if(j==col-1&&i<row)//如果到了一行的最后面就调转到下一行 大前提是找不到word[index]相等{cout<<"最末尾的 "<<board[i][j]<<endl;i++;j=0;}else j++;}} return 0;}
};
//写的有点问题,暂时想不到怎么改,先放着,通过用例71/83 卡住的是abcd 但是改了又有问题
无语 看了 答案 都写不对 在类成员里面定义了row和col 就不要重复定义了 不然不知道为什么就开始发疯
class Solution {
public:bool exist(vector<vector<char>>& board, string word) {rows=board.size();cols=board[0].size();for(int i=0;i<rows;i++){for(int j=0;j<cols;j++){if (dfs(board,word,i,j,0)) return true;}}return false;}
private:int rows,cols;bool dfs(vector<vector<char>>& board,string word,int i,int j,int k){if(i>=rows||i<0||j>=cols||j<0||board[i][j]!=word[k]) return false;if(k==word.size()-1) return true;board[i][j]='\0';bool res=dfs(board,word,i+1,j,k+1)||dfs(board,word,i-1,j,k+1)||dfs(board,word,i,j+1,k+1)||dfs(board,word,i,j-1,k+1);board[i][j]=word[k];return res;}
};

先贴出蠢货写出来的东西 审题也审不明白 机器人只能上下左右走 不能一行一行遍历 菜鸟总是这样 自己把自己搞破防
通过用列46/51
class Solution {
public:int movingCount(int m, int n, int k) {int index=0;for(int i=0;i<m;i++){if(add(i)>k) break;for(int j=0;j<n;j++){if(add(j)>k) break;int sum=add(i)+add(j);if(sum<=k) {index++;cout<<sum<<endl;}}}return index;}
private:int add(int x){int sum=0,num=0;while(x){num=x%10;x=x/10;sum+=num;}return sum;}
};
问题出在哪里呢!!!! 就是比如【10,0】虽然数位之和等于1,但是无法通过【9,0】或者其他走过去,假设k=1的话,也就是他妈的他有障碍物啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊
aaaa继续做就是要判断边界条件啊啊啊啊啊啊啊啊啊啊啊啊就是判断他是否能进入4个相邻的格子
首先0,0必定可以嗷,check[0,0]置为1。0,0能走到0,1和1,0,那对于0,1和1,0两个点来说,就是判断他们的上面i-1和左边j-1是否可以走,如果可以那就可以从左边和上面分别走过来,能走到当前这个点就置为1,然后左边和上面能走的点都走了之后,还有两个方向没有判断 ,再来判断能不能从右边(i+1)走到左边,下面(i+1)走到上面,如果能走到当前点,就置为1,最后有多少个1,就有多少个机器人能走的格子。
class Solution {
public:int movingCount(int m, int n, int k) {int index=0;int check[m][n];//不能直接写check[m][n]也不能check[m][n]={0},第一次无法保证元素全为0 ,第二个会报错memset(check,0,sizeof(check));//memset进行内存清零,可以将一块内存设置为指定的值check[0][0]=1;for(int i=0;i<m;i++){for(int j=0;j<n;j++){int sum=add(i)+add(j);if(sum<=k) {if(i-1>=0&&check[i-1][j]==1||j-1>=0&&check[i][j-1]==1) check[i][j]=1;}}}for(int i=0;i<m;i++){for(int j=0;j<n;j++){int sum=add(i)+add(j);if(sum<=k) {if(i+1<m&&check[i+1][j]==1||j+1<n&&check[i][j+1]==1) check[i][j]=1;}}}for(int i=0;i<m;i++){for(int j=0;j<n;j++){int sum=add(i)+add(j);if(check[i][j]) {index++;}}}return index;}
private:int add(int x){int sum=0,num=0;while(x){num=x%10;x=x/10;sum+=num;}return sum;}
};

和上题目类似,属于典型的搜索&回溯算法
先了解一下BFS模板
不需要当前遍历到哪一层,BFS模板
while queue 不空cur=queue.front();queue.pop();for 结点 in cur的所有相邻节点if 该节点有效且没被访问过:queue.push(该结点)
需要确定遍历到哪一层,比如之前写过一题打印二叉链表
level=0
while queue不空:size=queue.size()while(size--){cur=queue.pop();for 结点 in cur的所有相邻结点:if 该节点有效且未被访问过:queue.push(该节点)}level++;
直接使用模板
算了dfs
class Solution {
public:int sum(int x){//计算数位和int count = 0;while(x){count += x%10;x /= 10;}return count;}int dx[4] = {-1, 0, 1, 0}, dy[4] = {0, 1, 0, -1};//左上右下int res = 0;int m , n , k;vector<vector<bool>>st;int movingCount(int _m, int _n, int _k) {
//m行n列
//不能进入行坐标和列坐标的"数位"之和大于k的格子
// i + j > km = _m, n = _n, k = _k;vector<vector<bool>>_st(m,vector<bool>(n));//初始化st = _st;return dfs(0,0);}int dfs(int x, int y){st[x][y]=true;res++;for(int i = 0 ;i < 4 ; i++){int a = x+dx[i] , b = y + dy[i];if(a >= 0 && a < m && b >= 0 && b < n && !st[a][b] && sum(a)+sum(b)<=k){dfs(a,b);//那么我们就渲染一下}}return res;}};
DFS解法
class Solution {
public:int movingCount(int m, int n, int k) {vector<vector<int>> check(m,vector<int>(n,0));//球球你了祖宗啊记住这个定义方式吧dfs(check,m,n,k,0,0);return result;}private:int result=0;int add(int x){int sum=0,num=0;while(x){num=x%10;x=x/10;sum+=num;}return sum;}void dfs(vector<vector<int>> &check,int m, int n, int k,int x,int y){int sum=add(x)+add(y);if(x<0||x>=m||y<0||y>=n||check[x][y]==1||sum>k) return ;result++;check[x][y]=1;dfs(check,m,n,k,x+1,y);dfs(check,m,n,k,x,y+1);}
};
BFS解法就见鬼去吧 不想写队列啊啊啊啊

class Solution {
public:vector<vector<int>> pathSum(TreeNode* root, int target) {if(!root) return result;dfs(root,target);return result;}
private:vector<vector<int>> result;vector<int> subresult;void dfs(TreeNode* root,int target){if(!root) return ;subresult.push_back(root->val);target-=root->val;if(root->left==nullptr&&root->right==nullptr&&target==0){result.push_back(subresult);}dfs(root->left,target);dfs(root->right,target);subresult.pop_back();//回溯}
};
相关文章:
剑指offer12 矩阵中的路径 13 机器人的运动范围 34.二叉树中和为某一值得路径
class Solution { public:bool exist(vector<vector<char>>& board, string word) {int rowboard.size(),colboard[0].size();int index0,i0,j0;if(word.size()>row*col) return 0;//vector<vector<int>> visit[row][col];//标记当前位置有没有…...
Pushgateway+Prometheus监控Flink
思路方案 FlinkMtrics->pushgateway->prometheus->grafnana->altermanager 方案 : Flink任务先将数据推到pushgateway。然后pushgateway将值推送到prometheus,最后grafana展示prometheus中的值, 去这个 https://prometheus.io/download/ 下载最新的 Prometheu…...
OpenCV图像处理-视频分割静态背景-MOG/MOG2/GMG
视频分割背景 1.概念介绍2. 函数介绍MOG算法MOG2算法GMG算法 原视频获取链接 1.概念介绍 视频背景扣除原理:视频是一组连续的帧(一幅幅图组成),帧与帧之间关系密切(GOP/group of picture),在GOP中,背景几乎…...
nginx 反向代理浅谈
前言 通常情况下,客户端向Web服务器发送请求,Web服务器响应请求并返回数据。而在反向代理中,客户端的请求不直接发送到Web服务器,而是发送到反向代理服务器。反向代理服务器会将请求转发给真实的Web服务器,Web服务器响…...
【概率预测】对风力发电进行短期概率预测的分析研究(Matlab代码实现)
💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…...
原型设计模式go实现尝试
文章目录 前言代码结果总结 前言 本文章尝试使用go实现“原型”。 代码 package mainimport ("fmt" )// 不同原型标志枚举 type Type intconst (PROTOTYPE_1 Type iotaPROTOTYPE_2 )// 原型接口 type IPrototype interface {Clone() IPrototypeMethod(value int)P…...
链表是否有环、环长度、环起点
问题引入 如何检测一个链表是否有环,如果有,那么如何确定环的长度及起点。 引自博客:上述问题是一个经典问题,经常会在面试中被问到。我之前在杭州一家网络公司的电话面试中就很不巧的问到,当时是第一次遇到那个问题&…...
有效文档管理离不开这几个特点
在我们日常生活中经常会遇到各式各样的文档类型,想要把它们都统一管理起来也不是一件容易的事情。后来looklook就去研究怎么样可以把这一堆文档整理起来呢?接下来,looklook就从有效的文档管理展开,和大家分享一下! 有效…...
爬虫-requests-cookie登录古诗文网
一、前言 1、requests简介 requests是一个很实用的Python HTTP客户端库,爬虫和测试服务器响应数据时经常会用到,它是python语言的第三方的库,专门用于发送HTTP请求,使用起来比urllib更简洁也更强大。 2、requests的安装 pip i…...
Spring Boot实践三 --数据库
一,使用JdbcTemplate访问MySQL数据库 1,确认本地已正确安装mysql 按【winr】快捷键打开运行;输入services.msc,点击【确定】;在打开的服务列表中查找mysql服务,如果没有mysql服务,说明本机没有…...
分布式锁漫谈
简单解释一下个人理解的分布式锁以及主要的实现手段。 文章目录 什么是分布式锁常用分布式锁实现 什么是分布式锁 以java应用举例,如果是单应用的情况下,我们通常使用synchronized或者lock进行线程锁,主要为了解决多线程或者高并发场景下的共…...
mac 安装 php 与 hyperf 框架依赖的扩展并启动 gptlink 项目
m系列 mac 安装 php 与 hyperf 框架依赖的扩展并启动 gptlink 项目 gptlink 项目是一个前后端一体化的 chatgpt 开源项目 gptlink 项目地址:https://github.com/gptlink/gptlink 安装 php 8.0 版本: brew install php8.0安装完成后提示如下ÿ…...
ansible中run_once的详细介绍和使用说明
在Ansible中,run_once是一个用于控制任务在主机组中只执行一次的关键字参数。当我们在编写Ansible任务时,有时候我们希望某个任务只在主机组中的某个主机上执行一次,而不是在每个主机上都执行。 以下是run_once参数的详细说明和用法…...
短视频矩阵系统源码开发流程
一、视频矩阵系统源码开发流程分为以下几个步骤: 四、技术开发说明: 产品原型PRD需求文档产品交互流程图部署方式说明完整源代码源码编译方式说明三方框架和SDK使用情况说明和代码位置平台操作文档程序架构文档 一、抖音SEO矩阵系统源码开发流程分为以…...
vite+vue3 css scss PC移动布局自适应
1. 安装 postcss-pxtorem 和 autoprefixer npm install postcss-pxtorem autoprefixer --save2. vite.config.js引入并配置 import postCssPxToRem from postcss-pxtorem import autoprefixer from autoprefixerexport default defineConfig({base: ./,resolve: {alias},plug…...
BLE配对和绑定
参考:一篇文章带你解读蓝牙配对绑定 参考:BLE安全之SM剖析(1) 参考:BLE安全之SM剖析(2) 参考:BLE安全之SM剖析(3) 目录 前言基本概念解读Paring(配对)Bonding(绑定)STK短期秘钥、LTK长期秘钥等 …...
无涯教程-jQuery - html( val )方法函数
html(val)方法设置每个匹配元素的html内容。此属性在XML文档上不可用。 html( val ) - 语法 selector.html( val ) 这是此方法使用的所有参数的描述- val - 这是要设置的html内容。 html( val ) - 示例 以下是一个简单的示例,简单说明了此方法的用法- <…...
【单链表OJ题:删除链表中等于给定值 val 的所有节点】
1.删除链表中等于给定值 val 的所有节点 题目来源 给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val val 的节点,并返回 新的头节点 。 /*** Definition for singly-linked list.* struct ListNode {* int val;* s…...
vue element ui web端引入百度地图,并获取经纬度
最近接到一个新需要,要求如下: 当我点击选择地址时,弹出百度地图, 效果如下图: 实现方法: 1、首先要在百度地图开放平台去申请一个账号和key 2、申请好之后,在项目的index.html中引入 3、…...
25.10 matlab里面的10中优化方法介绍—— 函数fmincon(matlab程序)
1.简述 关于非线性规划 非线性规划问题是指目标函数或者约束条件中包含非线性函数的规划问题。 前面我们学到的线性规划更多的是理想状况或者说只有在习题中,为了便于我们理解,引导我们进入规划模型的一种情况。相比之下,非线性规划会更加贴近…...
XML Group端口详解
在XML数据映射过程中,经常需要对数据进行分组聚合操作。例如,当处理包含多个物料明细的XML文件时,可能需要将相同物料号的明细归为一组,或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码,增加了开…...
黑马Mybatis
Mybatis 表现层:页面展示 业务层:逻辑处理 持久层:持久数据化保存 在这里插入图片描述 Mybatis快速入门 
UniApp 集成腾讯云 IM 富媒体消息全攻略(地理位置/文件) 一、功能实现原理 腾讯云 IM 通过 消息扩展机制 支持富媒体类型,核心实现方式: 标准消息类型:直接使用 SDK 内置类型(文件、图片等)自…...
解析两阶段提交与三阶段提交的核心差异及MySQL实现方案
引言 在分布式系统的事务处理中,如何保障跨节点数据操作的一致性始终是核心挑战。经典的两阶段提交协议(2PC)通过准备阶段与提交阶段的协调机制,以同步决策模式确保事务原子性。其改进版本三阶段提交协议(3PC…...
在Spring Boot中集成RabbitMQ的完整指南
前言 在现代微服务架构中,消息队列(Message Queue)是实现异步通信、解耦系统组件的重要工具。RabbitMQ 是一个流行的消息中间件,支持多种消息协议,具有高可靠性和可扩展性。 本博客将详细介绍如何在 Spring Boot 项目…...
比特币:固若金汤的数字堡垒与它的四道防线
第一道防线:机密信函——无法破解的哈希加密 将每一笔比特币交易比作一封在堡垒内部传递的机密信函。 解释“哈希”(Hashing)就是一种军事级的加密术(SHA-256),能将信函内容(交易细节…...
npm安装electron下载太慢,导致报错
npm安装electron下载太慢,导致报错 背景 想学习electron框架做个桌面应用,卡在了安装依赖(无语了)。。。一开始以为node版本或者npm版本太低问题,调整版本后还是报错。偶尔执行install命令后,可以开始下载…...
前端打包工具简单介绍
前端打包工具简单介绍 一、Webpack 架构与插件机制 1. Webpack 架构核心组成 Entry(入口) 指定应用的起点文件,比如 src/index.js。 Module(模块) Webpack 把项目当作模块图,模块可以是 JS、CSS、图片等…...
Modbus转Ethernet IP深度解析:磨粉设备效率跃升的底层技术密码
在建材矿粉磨系统中,开疆智能Modbus转Ethernet IP网关KJ-EIP-101的应用案例是一个重要的技术革新。这个转换过程涉及到两种主要的通信协议:Modbus和Ethernet IP。Modbus是一种串行通信协议,广泛应用于工业控制系统中。它简单、易于部署和维护…...
