牛客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;不能让用户拥有完善良好的用户体验。虽然是存放在服务器上&…

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

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

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…

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

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

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;因此我们…

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

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

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

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

七彩虹(Colorful)隐星P16 2023款笔记本电脑原装出厂Win11系统镜像下载 带建Recovery一键还原功能

七彩虹原厂Windows预装OEM专用系统&#xff0c;恢复出厂开箱状态一模一样 适用型号&#xff1a;隐星P16 23 链接&#xff1a;https://pan.baidu.com/s/1Ig5MQMiC8k4VSuCOZRQHUw?pwdak5l 提取码&#xff1a;ak5l 原厂W11系统自带所有驱动、出厂时自带的主题与专用壁纸、系…

惠海原厂直销 H6922 升压恒压IC芯片 2.8-40V升48V60V72V80V100V方案 高效率 低功耗

升压恒压IC芯片是一种在2.8V至40V的宽输入电压范围内工作&#xff0c;并能够将输出电压升高到48V、60V、72V、80V甚至100V的芯片。这种芯片以高效率、低功耗为特点&#xff0c;因此非常适合于对电源效率和功耗有严格要求的应用领域。升压恒压IC芯片的工作原理通常基于电感和电容…

使用FPGA发送一个经过曼彻斯特编码的伪随机序列

介绍 这几天突然就不知道要使用FPGA实现什么样的功能了,然后就跑去学习数电了,学的也是晕晕的。正好之前写了一个使用FPGA发送伪随机序列的代码,然后因为需要使用曼彻斯特编码,所以又加了一个模块吧,使得最后输出的波形经过曼彻斯特编码。 曼彻斯特编码 首先,曼彻斯特编…

前端入门:HTML(css轮廓,填充,宽高)

1.CSS轮廓 注意&#xff1a; outline中&#xff0c;out-style是必须要设置的&#xff0c;格式为&#xff1a; outline-style一共有以下的几个值&#xff1a; 2.CSS填充属性 这是一个用于在一个元素的内容周围产生空间&#xff0c;也就是边框内到白框外之间的距离&#xff0c;…

一款神奇的地理数据可视化python库

在地理信息系统&#xff08;GIS&#xff09;和地理数据可视化领域&#xff0c;Python的易用性和强大的库支持使其成为处理地理数据的理想选择之一。今天我们介绍Cartopy库&#xff0c;它为地理数据可视化提供了强大的支持。无论是对于GIS专业人士还是对地理数据可视化感兴趣的初…

Windows环境下nvm的安装与使用

nvm全名node.js version management&#xff0c;顾名思义是一个管理多个nodejs的版本工具。通过它可以安装和切换不同版本的 nodejs&#xff0c;为了解决 node.js各种版本存在不兼容现象可以通过它可以安装和切换不同版本。 一、下载 nvm安装包地址&#xff1a; https://gith…

使用yolov8+QT+onnrunxtime进行开发的注意事项

1、本来想尝试做一个C的yolov8在QT5.15.2的应用&#xff1b; 因此&#xff0c;在实现这个目标的时候&#xff0c;我先用了yolov8自带的export进行导出&#xff0c;使用的代码很简单&#xff0c;如下所示&#xff1a; import os from ultralytics import YOLO# model YOLO(&q…

网络安全之防范钓鱼邮件

随着互联网的快速发展&#xff0c;新的网络攻击形式“网络钓鱼”呈现逐年上升的趋势&#xff0c;利用网络钓鱼进行欺骗的行为越来越猖獗&#xff0c;对互联网的安全威胁越来越大。网络钓鱼最常见的欺骗方式就是向目标群体发送钓鱼邮件&#xff0c;而邮件标题和内容&#xff0c;…