牛客NC242 单词搜索【中等 递归DFS C++/Java/Go/PHP】

题目

在这里插入图片描述
在这里插入图片描述
题目链接:
https://www.nowcoder.com/practice/987f2981769048abaf6180ed63266bb2

思路

递归:以word第一个字符为起点,在矩阵中
递归搜索,检查是否存在完整的word路径,
注意恢复现场,又叫回溯,这是核心

参考答案C++

class Solution {public:/*** 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可*** @param board string字符串vector* @param word string字符串* @return bool布尔型*/bool exist(vector<string>& board, string word) {//dfsint n = board.size();int m = board[0].size();vector<vector<bool>> visted(n, vector<bool>(m));for (int i = 0; i < n; i++) {for (int j = 0; j < m; j++) {if (board[i][j] == word[0]) {if (dfs(board, i, j, word, 0, visted)) {return true;}}}}return false;}bool dfs(vector<string>& board, int i, int j, string word, int idx,vector<vector<bool>> visited) {if (idx == word.size())return true;if (i < 0 || i >= board.size() || j < 0 || j >= board[0].size() ||visited[i][j] || board[i][j] != word[idx])return false;visited[i][j] = true;//从上下左右搜索bool b1 = dfs(board, i - 1, j, word, idx + 1, visited);bool b2 = dfs(board, i + 1, j, word, idx + 1, visited);bool b3 = dfs(board, i, j - 1, word, idx + 1, visited);bool b4 = dfs(board, i, j + 1, word, idx + 1, visited);visited[i][j] = false; //恢复现场,又叫回溯return b1 || b2 || b3 || b4;}
};

参考答案Java

import java.util.*;public class Solution {/*** 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可*** @param board string字符串一维数组* @param word string字符串* @return bool布尔型*/public boolean exist (String[] board, String word) {//dfsint n = board.length;int m = board[0].length();boolean[][] visited = new boolean[n][m];for (int i = 0; i < n ; i++) {for (int j = 0; j < m ; j++) {if (board[i].charAt(j) == word.charAt(0)) {//开始dfsif ( dfs(board, i, j, word, 0, visited)) {return true;}}}}return false;}//当前来到board的i行j列,检查board[i,j]是否等于word[idx]public boolean dfs(String[] board, int i, int j, String word, int idx,boolean[][] visited) {if (idx == word.length()) return true; //说明在矩阵中找到了单词//判断是否越界,是否访问过,检查board[i,j]是否等于word[idx]if (i < 0 || i >= board.length || j < 0 || j >= board[0].length() ||visited[i][j] || board[i].charAt(j) != word.charAt(idx)) {return false;}visited[i][j] = true;boolean b1 = dfs(board, i - 1, j, word, idx + 1, visited);boolean b2 =  dfs(board, i + 1, j, word, idx + 1, visited);boolean b3 =  dfs(board, i, j - 1, word, idx + 1, visited);boolean b4 =  dfs(board, i, j + 1, word, idx + 1, visited);visited[i][j] = false; //恢复现场,又叫回溯return b1 || b2 || b3 || b4;}
}

参考答案Go

package main/*** 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可*** @param board string字符串一维数组* @param word string字符串* @return bool布尔型*/
func exist(board []string, word string) bool {//dfsn := len(board)m := len(board[0])visited := make([][]bool, n)for i := 0; i < n; i++ {visited[i] = make([]bool, m)}for i := 0; i < n; i++ {for j := 0; j < m; j++ {if board[i][j] == word[0] {if dfs(board, i, j, word, 0, visited) {return true}}}}return false
}func dfs(board []string, i, j int, word string, idx int, visited [][]bool) bool {if idx == len(word) {return true}if i < 0 || i >= len(board) || j < 0 || j >= len(board[0]) || visited[i][j] || board[i][j] != word[idx] {return false}visited[i][j] = true//上下左右搜索b1 := dfs(board, i-1, j, word, idx+1, visited)b2 := dfs(board, i+1, j, word, idx+1, visited)b3 := dfs(board, i, j-1, word, idx+1, visited)b4 := dfs(board, i, j+1, word, idx+1, visited)visited[i][j] = false //恢复现场,又叫回溯return b1 || b2 || b3 || b4
}

参考答案PHP

<?php/*** 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可** * @param board string字符串一维数组 * @param word string字符串 * @return bool布尔型*/
function exist( $board ,  $word )
{//dfs$n= count($board);$m = strlen($board[0]);$visited =[];for($i=0;$i<$n;$i++){for($j=0;$j<$m;$j++){$visited[$i][$j]=false;}}for($i=0;$i<$n;$i++){for($j=0;$j<$m;$j++){if($board[$i][$j] ==$word[0]){if(dfs($board,$i,$j,$word,0,$visited)){return true;}}}}return false;
}function dfs($board,$i,$j,$word,$idx,$visited){if($idx == strlen($word))return true;if($i<0 || $i>=count($board) || $j<0 || $j>=strlen($board[0]) ||$visited[$i][$j] || $board[$i][$j]!=$word[$idx])return false;$visited[$i][$j]=true;//上下左右四个方向搜索$b1 = dfs($board,$i-1,$j,$word,$idx+1,$visited);$b2 = dfs($board,$i+1,$j,$word,$idx+1,$visited);$b3 = dfs($board,$i,$j-1,$word,$idx+1,$visited);$b4 = dfs($board,$i,$j+1,$word,$idx+1,$visited);$visited[$i][$j]=false; //恢复现场,又叫回溯return $b1||$b2||$b3||$b4;
}

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

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

相关文章

【LAMMPS学习】八、基础知识(5.1)有限尺寸球形和非球形粒子

8. 基础知识 此部分描述了如何使用 LAMMPS 为用户和开发人员执行各种任务。术语表页面还列出了 MD 术语&#xff0c;以及相应 LAMMPS 手册页的链接。 LAMMPS 源代码分发的 examples 目录中包含的示例输入脚本以及示例脚本页面上突出显示的示例输入脚本还展示了如何设置和运行各…

Gin的中间件执行流程与用法

一、背景 我们在使用Gin框架进行Web开发的时候&#xff0c;基本上都会遇到登录拦截的场景。 例如某些接口必须在登录以后才能访问&#xff0c;根据登录用户的信息以及权限&#xff0c;拿到属于自己的数据, 反之&#xff0c;没登录过则直接拒绝访问。 那么我们怎么做到这些登录…

Agent AI 智能体的未来

Agent AI智能体的未来可能会变得更加普遍和智能。以下是一些可能出现的趋势和发展方向&#xff1a; 1、个性化服务: Agent AI智能体可能会变得更加个性化&#xff0c;能够根据用户的偏好和习惯提供定制化的服务和建议。 2、多模态交互: 未来的Agent AI可能会支持更多的多模态交…

【麒麟(Linux)系统远程连接到windows系统并进行文件传输】

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言使用步骤总结 前言 一般来说&#xff0c;windows自带远程桌面&#xff0c;使用的RDP协议&#xff0c;Linux上支持RDP协议的软件很多&#xff0c;常用的是Remmi…

陪丨玩丨系丨统搭建制作流程APP小程序H5多端源码前后端一次性交付,本地授权,无二次费用!可定制开发!

陪丨玩app小程序H5开发&#xff0c;软件搭建&#xff0c;程序制作、系统设计 数据存储是陪玩平台源码的重点&#xff0c;没有数据库&#xff0c;用户的账号信息、平台产生的数据都无法顺利存储和读取&#xff0c;不能让用户拥有完善良好的用户体验。虽然是存放在服务器上&…

python下常用的图像处理工具

在Python中&#xff0c;常用的图像处理工具有很多&#xff0c;以下是一些常见的和推荐的工具&#xff1a; OpenCV&#xff1a;OpenCV&#xff08;Open Source Computer Vision Library&#xff09;是最流行的计算机视觉库之一&#xff0c;它包含大量的图像处理函数&#xff0c…

ThreeJs 环境配置及遇到问题的解决方法

一、环境搭建 ThreeJs在实际在实际使用中更多的是结合框架开发例如&#xff1a;vue框架、react框架&#xff0c;在使用时需要配置开发环境&#xff0c;本文使用的是vscode ThreeJs NodeJs vue 1、ThreeJs安装 下载路径&#xff1a;GitHub - mrdoob/three.js: JavaScript…

linux 创建管理员用户并使用生成秘钥登录服务器

一台新的云服务器&#xff0c;初始化登录的是root用户,现需要其他人登录该服务器但肯定不能也使用root权限登录&#xff0c;需要创建新的用户并给该用户生成秘钥并给与管理员的权限&#xff0c;通过ssh免密登录 要在Linux系统上创建新用户并赋予管理员权限&#xff08;sudo权限…

jbutton 按钮 圆角 渐变色

效果图 没按压时背景渐变色 鼠标按压时背景色改变 下面是可用的源码 package com.beijin.robot.utils; import javax.swing.*; import javax.swing.border.Border; import java.awt.*; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent;public clas…

【python打包成exe文件】

python打包成exe文件 2024-03-05 18:29 第三种方式: 用python打成包文件运行即可 首先安装包&#xff1a; pip install pyinstaller 安装成功后&#xff0c; 在当前的文件夹路径下 运行命令 pyinstaller ***.py 文件 接着会自动打包成一个可执行的 exe文件 &#xff0c;点击这…

IDEA使用技巧(常用设置、快捷键等)

IDEA使用技巧 一、IDEA常用基本设置设置代码背景颜色/主题/字体Ctrl鼠标滚轮缩放字体大小设置字符编码左右两侧的Project&#xff0c;Structure&#xff0c;Maven等按钮消失新增类似sout,psvm的模版切换某个模块编译的JDK版本 二、常用快捷键CtrlAltT包裹代码Alt回车联想补全Ct…

Android 振动和触感反馈功能失效问题分析

文章目录 一、 可以先通过adb来确定是否有打印Log&#xff0c;查看中相关的按键振动事件是否有效二、 适配按键事件三、延长振动时长 在Android13的项目(MTK平台)中遇到这样一个问题&#xff0c;在设置 - 提示音和振动 - 振动和触感反馈 - 打开按触反馈&#xff0c;但是按键没有…

在VSCode中配置多个版本的Python环境,并设置PYTHONHOME环境变量

在VSCode中配置多个版本的Python环境&#xff0c;并设置PYTHONHOME环境变量&#xff0c;可以通过以下步骤进行&#xff1a; 安装多个版本的Python 首先&#xff0c;你需要在你的计算机上安装多个版本的Python。你可以从Python的官方网站下载不同版本的Python安装包&#xff0…

QT5之lambda

使用lambda需要 配置c11 所以在点.pro文件里面配置添加如下 CONFIG c11 使用到qDebug 打印包含头文件 #include<QDebug> lambda 表达式使用 代替槽如下 #include "mainwidget.h" #include<QPushButton> #include<QDebug> mainWidget::mainWid…

Vue路由的模式和原理

一、hash模式&#xff08;默认&#xff09; 使用URL的hash来模拟一个完整的URL&#xff0c;当URL发生改变时不会向服务器发起请求。# 和其后面的字符称为hash&#xff0c;可通过 window.location.hash 获取。当hash改变会触发&#xff08;包括浏览器的前进、后退&#xff09;会…

Kafka(十二)Streams

目录 Streams1 什么式是流式处理2 流式处理的相关概念2.1 拓扑2.2 时间2.2.1 输入时间2.2.2 输出时间 2.3 状态2.4 流和表2.5 时间窗口2.5.1 测试时间窗口 2.6 处理保证 3 流式处理设计模式3.1 单事件处理3.2 使用本地状态3.3 多阶段处理和重分区3.4 使用外部查找&#xff1a;流…

【哈希】Leetcode 两数之和

题目讲解 1. 两数之和 算法讲解 我们希望让这个数组有序&#xff0c;然后再寻找的时候可以很快的找到是否存在这个target - nums[i]&#xff0c;这里需要返回的是下标&#xff0c;所以需要一个数据结构保存key&#xff1a;nums AND val&#xff1a;index&#xff0c;因此我们…

Qt——置灰窗口

在Qt中&#xff0c;你可以使用QGraphicsEffect来将一个窗口置灰化。同时&#xff0c;你可以通过设置QGraphicsEffect来禁用整个窗口上的所有交互。下面是一个简单的示例代码&#xff0c;演示如何在Qt中将一个窗口置灰并禁用交互&#xff1a; #include <QtWidgets>int ma…

Java设计模式 _结构型模式_桥接模式

一、桥接模式 1、桥接模式 桥接模式&#xff08;Bridge Pattern&#xff09;是一种结构型设计模式。用于把一个类中多个维度的抽象化与实现化解耦&#xff0c;使得二者可以独立变化。 2、实现思路 使用桥接模式&#xff0c;一定要找到这个类中两个变化的维度&#xff1a;如支…

《深入理解mybatis原理》 MyBatis的架构设计以及实例分析

《深入理解mybatis原理》 MyBatis的架构设计以及实例分析 MyBatis是目前非常流行的ORM框架&#xff0c;它的功能很强大&#xff0c;然而其实现却比较简单、优雅。本文主要讲述MyBatis的架构设计思路&#xff0c;并且讨论MyBatis的几个核心部件&#xff0c;然后结合一个select查…