力扣0079单词搜索

2024-01-27 11:36
文章标签 搜索 力扣 单词 0079

本文主要是介绍力扣0079单词搜索,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

单词搜索

难度:中等

题目描述:

给定一个 m x n 二维字符网格 board 和一个字符串单词 word 。如果 word 存在于网格中,返回 true ;否则,返回 false
单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。

示例1:

输入:board = [[“A”,“B”,“C”,“E”],[“S”,“F”,“C”,“S”],[“A”,“D”,“E”,“E”]], word = “ABCCED”
输出:true

示例2:

输入:board = [[“A”,“B”,“C”,“E”],[“S”,“F”,“C”,“S”],[“A”,“D”,“E”,“E”]], word = “SEE”
输出:true

示例3:

输入:board = [[“A”,“B”,“C”,“E”],[“S”,“F”,“C”,“S”],[“A”,“D”,“E”,“E”]], word = “ABCB”
输出:false

题解:

根据题目可得需要用到回溯算法
遍历表格内的每一个元素,如果满足要求即可回溯,最终得到结果,以下为具体步骤:

  • 定义两个方向数组moveXmoveY
  • 如果当前位置的元素和单词中的元素内容不相同,返回false
  • 如果遍历到单词的最后一个元素,返回true
  • 将当前位置设置为true,并进行循环:
    • 新的方向为当前方向加上第i次循环中moveX[i]move[Y]的值
    • 如果新的方向均大于零并且移动的下一次元素位置不超过二维数组边界并且将要遍历的元素没有使用过,那么就进行回溯,将新的移动位置传入到回溯,并将判断的单词元素下标加一
    • 如果回溯结束之后满足条件,返回ture
    • 如果循环结束之后没有最终满足,对操作进行回头,即将当前位置设为未使用并返回false
  • 遍历每一个元素,对其都进行回溯,如果其中的元素在回溯中最后返回true,则返回true
  • 如果所有元素都不满足条件,则返回false

最后的结果即为题目答案

想法代码

class Solution
{readonly int[] desX = new int[] { 1, -1, 0, 0 };readonly int[] desY = new int[] { 0, 0, 1, -1 };public static void Main(String[] args){char[][] board ={new[] { 'A', 'B', 'C', 'E' },new[] { 'S', 'F', 'C', 'S' },new[] { 'A', 'D', 'E', 'E' }};string word = "ABCB";Solution solution = new Solution();bool res = solution.Exist(board, word);Console.WriteLine(res);}bool DFS(int x, int y, string word, int index, char[][] board, bool[,] used){if (word[index] != board[x][y]) return false;if (index == word.Length - 1) return true;used[x, y] = true;for (int i = 0; i < 4; i++){int newX = x + desX[i];int newY = y + desY[i];if (newX >= 0 && newY >= 0 && newX < board.Length && newY < board[0].Length && used[newX, newY] != true){if (DFS(newX, newY, word, index + 1, board, used)) return true;}}used[x, y] = false;return false;}public bool Exist(char[][] board, string word){bool[,] used = new bool[board.Length, board[0].Length];for (int i = 0; i < board.Length; i++){for (int j = 0; j < board[i].Length; j++){if (board[i][j] == word[0]){if (DFS(i, j, word, 0, board, used)) return true;}}}return false;}
}

这篇关于力扣0079单词搜索的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/650126

相关文章

Python使用DeepSeek进行联网搜索功能详解

《Python使用DeepSeek进行联网搜索功能详解》Python作为一种非常流行的编程语言,结合DeepSeek这一高性能的深度学习工具包,可以方便地处理各种深度学习任务,本文将介绍一下如何使用P... 目录一、环境准备与依赖安装二、DeepSeek简介三、联网搜索与数据集准备四、实践示例:图像分类1.

基于Python实现多语言朗读与单词选择测验

《基于Python实现多语言朗读与单词选择测验》在数字化教育日益普及的今天,开发一款能够支持多语言朗读和单词选择测验的程序,对于语言学习者来说无疑是一个巨大的福音,下面我们就来用Python实现一个这... 目录一、项目概述二、环境准备三、实现朗读功能四、实现单词选择测验五、创建图形用户界面六、运行程序七、

C# ComboBox下拉框实现搜索方式

《C#ComboBox下拉框实现搜索方式》文章介绍了如何在加载窗口时实现一个功能,并在ComboBox下拉框中添加键盘事件以实现搜索功能,由于数据不方便公开,作者表示理解并希望得到大家的指教... 目录C# ComboBox下拉框实现搜索步骤一步骤二步骤三总结C# ComboBox下拉框实现搜索步骤一这

认识、理解、分类——acm之搜索

普通搜索方法有两种:1、广度优先搜索;2、深度优先搜索; 更多搜索方法: 3、双向广度优先搜索; 4、启发式搜索(包括A*算法等); 搜索通常会用到的知识点:状态压缩(位压缩,利用hash思想压缩)。

hdu1240、hdu1253(三维搜索题)

1、从后往前输入,(x,y,z); 2、从下往上输入,(y , z, x); 3、从左往右输入,(z,x,y); hdu1240代码如下: #include<iostream>#include<algorithm>#include<string>#include<stack>#include<queue>#include<map>#include<stdio.h>#inc

hdu 4517 floyd+记忆化搜索

题意: 有n(100)个景点,m(1000)条路,时间限制为t(300),起点s,终点e。 访问每个景点需要时间cost_i,每个景点的访问价值为value_i。 点与点之间行走需要花费的时间为g[ i ] [ j ] 。注意点间可能有多条边。 走到一个点时可以选择访问或者不访问,并且当前点的访问价值应该严格大于前一个访问的点。 现在求,从起点出发,到达终点,在时间限制内,能得到的最大

AI基础 L9 Local Search II 局部搜索

Local Beam search 对于当前的所有k个状态,生成它们的所有可能后继状态。 检查生成的后继状态中是否有任何状态是解决方案。 如果所有后继状态都不是解决方案,则从所有后继状态中选择k个最佳状态。 当达到预设的迭代次数或满足某个终止条件时,算法停止。 — Choose k successors randomly, biased towards good ones — Close

hdu4277搜索

给你n个有长度的线段,问如果用上所有的线段来拼1个三角形,最多能拼出多少种不同的? import java.io.BufferedInputStream;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;

每日一练7:简写单词(含链接)

1.链接 简写单词_牛客题霸_牛客网 2.题目 3.代码1(错误经验) #include <iostream>#include <string>using namespace std;int main() {string s;string ret;int count = 0;while(cin >> s)for(auto a : s){if(count == 0){if( a <=

两数之和--力扣1

两数之和 题目思路C++代码 题目 思路 根据题目要求,元素不能重复且不需要排序,我们这里使用哈希表unordered_map。注意题目说了只对应一种答案。 所以我们在循环中,使用目标值减去当前循环的nums[i],得到差值,如果我们在map中能够找到这个差值,就说明存在两个整数的和为目标值。 如果没有找到,就将当前循环的nums[i]以及下标i放入map中,以便后续查