每日一題---單詞搜索(深搜)

單詞搜索

給出一個二維字符數組和一個單詞,判斷單詞是否在數組中出現,

單詞由相鄰單元格的字母連接而成,相鄰單元指的是上下左右相鄰。同一單元格的字母不能多次使用。

數據范圍:

0 < 行長度 <= 100

0 < 列長度 <= 100

0 < 單詞長度 <= 1000

回溯/深搜

深度優先搜索,我們定義這樣一種搜索順序,即先枚舉單詞的起點,然后依次枚舉單詞的每個字母。在這個過程中需要將已經使用過的字母改成一個特殊字母,以避免重復使用字符。

在主函數中兩層循環遍歷整個二維數組,找出所有滿足等于單詞第一個字符的,然后創建一個深搜函數,把這個節點的下標.以及第幾個字母傳入dfs函數,這個函數用于判斷單詞是否在二維數組中.

dfs函數的函數頭:boolean dfs(String[] board, int i, int j, int pos)

//pos是記錄搜索到哪個字母了

函數體:從傳入的結點開始向四周搜索(可以借助偏移數組)

同時,對搜索過的坐標進行標記,避免重復搜索

如果滿足不越界,沒判斷過且等于對應單詞字符,就遞歸下一個

所有都滿足就返回true,反之返回false

結束條件:搜索到單詞的最后一個字符

注意:可以將一些函數中用到的數據定義為全局變量,減少參數傳遞

時間復雜度:單詞起點一共有 n2個,單詞的每個字母一共有上下左右四個方向可以選擇,但由于不能走回頭路,所以除了單詞首字母外,僅有三種選擇。所以總時間復雜度是 O(n2·3k)。?

代碼:

import java.util.*;
public class Solution {int m, n;int[] dx = {0, 0, 1, -1};//偏移數組int[] dy = {1, -1, 0, 0};char[] word = {};boolean[][] ans;//用于標記是否已經搜索public boolean exist (String[] board, String _word) {word = _word.toCharArray();m = board.length;n = board[0].length();ans = new boolean[m][n];for(int i = 0; i < m; i++) {for(int j = 0; j < n; j++) {if(word[0] == board[i].charAt(j)) {//遍歷所有字母if(dfs(board, i, j, 0) == true) return true;}}}return false;}public boolean dfs(String[] board, int i, int j, int pos) {if(pos == word.length-1) {//pos是記錄搜索到哪個字母了return true;}ans[i][j] = true;//標記以搜索for(int a = 0; a < 4; a++) {//上下左右搜索int x = i + dx[a];int y = j + dy[a];if(x < m && x >= 0 && y < n && y >= 0 && !ans[x][y] && board[x].charAt(y) == word[pos+1]) {//沒搜索過且字母相等if(dfs(board, x, y, pos+1)) return true;}}ans[i][j] = false;//走到這里說沒搜到,更改標記為未搜return false;}
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/73472.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/73472.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/73472.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【深度學習】多源物料融合算法(一):量綱對齊常見方法

目錄 一、引言 二、量綱對齊常見方法 2.1 Z-score標準化Sigmoid歸一化 2.2 Min-Max 歸一化 2.3 Rank Transformation 2.4 Log Transformation 2.5 Robust Scaling 3、總結 一、引言 類似抖音、快手、小紅書等產品的信息流推薦業務&#xff0c;主要通過信息流廣告、信…

deepseek為什么要開源

一、生態位的搶占與鎖定&#xff1a;以 JDK 版本為例? 在軟件開發的世界里&#xff0c;生態位的搶占和先入為主的效應十分顯著。就拿 Java 開發中的 JDK 版本來說&#xff0c;目前大多數開發者仍在廣泛使用 JDK8。盡管 JDK17 和 JDK21 已經推出&#xff0c;且具備更多先進特性…

【AI】內容生成式AI(AIGC)的深度分析與擴展

引言 隨著人工智能&#xff08;AI&#xff09;技術的迅速發展&#xff0c;AI生成內容&#xff08;AIGC&#xff09;已經在多個領域表現出巨大潛力&#xff0c;改變了內容創作的方式。這篇文章將詳細介紹AI生成內容的技術原理、應用領域、優缺點、未來趨勢以及相關倫理問題&…

用C++新建快捷方式

1.創建文件 新建一個文件Ink.cpp,系統會自動生成對應的EXE文件 2.編寫代碼 #include<stdlib.h> int main(){ system("powershell -command \"$WshShellNew-Object -comObject WScript.Shell; $Shortcut$WshShell.CreateShortcut(\%UserProfile%\\Desktop\\1.…

前端Html5 Canvas面試題及參考答案

目錄 Canvas 元素的默認尺寸是多少?如何正確設置其寬高以避免圖像拉伸? 如何獲取 Canvas 的 2D 上下文對象?3D 上下文支持哪些技術? canvas.width 與 canvas.style.width 的區別是什么? Canvas 支持的圖像格式有哪些?如何將 Canvas 轉換為 Base64 圖片? Canvas 中如…

基于Python的天氣預報數據可視化分析系統-Flask+html

開發語言&#xff1a;Python框架&#xff1a;flaskPython版本&#xff1a;python3.8數據庫&#xff1a;mysql 5.7數據庫工具&#xff1a;Navicat11開發軟件&#xff1a;PyCharm 系統展示 系統登錄 可視化界面 天氣地圖 天氣分析 歷史天氣 用戶管理 摘要 本文介紹了基于大數據…

基于Uniapp開發tab選項卡/標簽欄前端組件

在開發一些業務場景時候&#xff0c;可能需要切換標簽欄來展示不同的信息列表。 為此開發了一個Uniapp組件&#xff08;myTab&#xff09;&#xff0c;下面為組件的展示效果&#xff1a; 案例代碼&#xff1a; <template><view class"content"><myt…

練習題:87

目錄 Python題目 題目 題目分析 代碼實現 代碼解釋 列表推導式部分&#xff1a; 變量賦值和輸出&#xff1a; 運行思路 結束語 Python題目 題目 使用列表推導式生成一個包含 1 到 100 中所有偶數的列表。 題目分析 本題要求使用 Python 的列表推導式生成一個包含 …

【DevOps】 基于數據驅動的Azure DevOps案例實現

推薦超級課程: 本地離線DeepSeek AI方案部署實戰教程【完全版】Docker快速入門到精通Kubernetes入門到大師通關課AWS云服務快速入門實戰目錄 **客戶場景:****解決方案:****架構:****架構細節:****結論**客戶場景: 為大量客戶提供基于Azure云的成果物重復部署服務。這可能…

文本組件+Image組件+圖集

Canvas部分知識補充 元素渲染順序 以Hierarchy參考 下方物體在上方物體前顯示 子物體在父物體前顯示 下方物體永遠在前顯示&#xff0c;無論上方的層次結構 資源導入 絕對路徑&#xff1a;C:\Windows\Fonts下的許多字體可以用做UIText的字體資源 圖片導入&#xff1a; 1.圖…

【量化策略】均值回歸策略

【量化策略】均值回歸策略 &#x1f680;量化軟件開通 &#x1f680;量化實戰教程 技術背景與應用場景 在金融市場中&#xff0c;價格波動往往呈現出一定的規律性。均值回歸策略正是基于這一觀察&#xff0c;認為資產價格會圍繞其歷史平均水平上下波動。當價格偏離均值較遠…

C++初階——類和對象(二)

C初階——類和對象&#xff08;二&#xff09; 本期內容書接上回&#xff0c;繼續討論類和對象相關內容。類和對象屬于C初階部分&#xff0c;主要反映了面向對象編程的三大基本特點之一——封裝&#xff0c;在C的學習中占有舉足輕重的地位&#xff01; 一、類對象模型 1.如何…

3-002: MySQL 中使用索引一定有效嗎?如何排查索引效果?

1. 索引失效的常見原因 雖然索引可以加速查詢&#xff0c;但在某些情況下&#xff0c;MySQL 可能不會使用索引&#xff0c;甚至使用索引反而更慢。 以下是一些常見導致索引失效的原因&#xff1a; ① 查詢條件使用了 ! 或 <> 原因&#xff1a;索引通常用于范圍或等值查…

LVGL移植到6818開發板

一、移植步驟 1.lv_config.h 配置文件啟動 framebuffer 2、lv_config.h 配置文件關閉SDL 2.修改main.c 去掉SDL輸入設備 3.修改Makefile 文件啟動交叉編譯 去掉警告參數 去掉SDL庫 4.交叉編譯代碼 make clean #清空 ? 必須要清空一次再編譯&#xff01; 因為修改了 lv_con…

linux系統命令——權限

一、有哪些權限 讀&#xff08;r&#xff09;——對應數字4 寫&#xff08;w&#xff09;——對應數字2 執行&#xff08;x&#xff09;——對應數字1 二、權限及數字的對應 4對應r-- 2對應-w- 1對應--x 5對應r-x 6對應rw- 7對應rwx 三、文件的基本屬性 如圖&#…

Android Dagger2 框架輔助工具模塊深度剖析(六)

一、引言 在 Android 開發領域&#xff0c;依賴注入&#xff08;Dependency Injection&#xff0c;簡稱 DI&#xff09;作為一種至關重要的設計模式&#xff0c;能顯著降低代碼間的耦合度&#xff0c;提升代碼的可測試性與可維護性。Dagger2 作為一款強大的依賴注入框架&#…

Django項目之訂單管理part3

一.前言 前面兩章已經把登錄給做完了&#xff0c;這一章節要說的是登錄的校驗和登錄以后的菜單展示&#xff0c;內容還是很多的。 二.菜單和權限 2.1 是否登錄 當我們進入其他的頁面&#xff0c;我們首先要判斷是否登錄&#xff0c;這個時候我們就要借助中間件來做session和…

多線程到底重不重要?

我們先說一下為什么要講多線程和高并發&#xff1f; 原因是&#xff0c;你想拿到一個更高的薪水&#xff0c;在面試的時候呈現出了兩個方向的現象&#xff1a; 第一個是上天 項目經驗高并發 緩存 大流量 大數據量的架構設計 第二個是入地 各種基礎算法&#xff0c;各種基礎…

AI大模型測試用例生成平臺

AI測試用例生成平臺 項目背景技術棧業務描述項目展示項目重難點 項目背景 針對傳統接口測試用例設計高度依賴人工經驗、重復工作量大、覆蓋場景有限等行業痛點&#xff0c;基于大語言模型技術實現接口測試用例智能生成系統。 技術棧 LangChain框架GLM-4模型Prompt Engineeri…

【論文筆記】Contrastive Learning for Compact Single Image Dehazing(AECR-Net)

文章目錄 問題創新網絡主要貢獻Autoencoder-like Dehazing NetworkAdaptive Mixup for Feature PreservingDynamic Feature Enhancement1. 可變形卷積的使用2. 擴展感受野3. 減少網格偽影4. 融合空間結構信息 Contrastive Regularization1. 核心思想2. 正樣本對和負樣本對的構建…