当前位置: 首页 > java >正文

79. Word Search

题目描述

79. Word Search

回溯

代码一,使用used数组

class Solution {vector<pair<int,int>> directions{{0,1},{0,-1},{1,0},{-1,0}};vector<vector<bool>> used;
public:bool exist(vector<vector<char>>& board, string word) {used.resize(board.size(),vector<bool>(board[0].size(),false));for(int i = 0;i < board.size();i++){for(int j = 0;j < board[i].size();j++){if(board[i][j] != word[0] || used[i][j] == true)continue;used[i][j] = true;if(backtrack(board,word,1,i,j))return true;used[i][j] = false;}}return false;}bool backtrack(vector<vector<char>>& board, string &word,int idx,int row,int col){if(idx == word.size())return true;for(const auto& dir: directions){int newrow = row+dir.first;int newcol = col+dir.second;if(newrow<0 || newrow>=board.size() || newcol<0 || newcol>= board[0].size())continue;if(used[newrow][newcol])continue;if(board[newrow][newcol] == word[idx]){used[newrow][newcol] = true;if(backtrack(board,word,idx+1,newrow,newcol))return true;used[newrow][newcol] = false;}}return false;}
};

代码二,不使用used数组

class Solution {vector<pair<int,int>> directions{{0,1},{0,-1},{1,0},{-1,0}};
public:bool exist(vector<vector<char>>& board, string word) {for(int i = 0;i < board.size();i++){for(int j = 0;j < board[i].size();j++){if(board[i][j] != word[0])continue;board[i][j] = '#';//word仅由大小写英文字母组成,将board[i][j]标记为#表示board[i][j]已经被使用if(backtrack(board,word,1,i,j))return true;board[i][j] = word[0];//恢复原字符}}return false;}bool backtrack(vector<vector<char>>& board, string &word,int idx,int row,int col){if(idx == word.size())return true;for(const auto& dir: directions){int newrow = row+dir.first;int newcol = col+dir.second;if(newrow<0 || newrow>=board.size() || newcol<0 || newcol>= board[0].size())continue;if(board[newrow][newcol] == word[idx]){board[newrow][newcol] = '#';if(backtrack(board,word,idx+1,newrow,newcol))return true;board[newrow][newcol] = word[idx];//恢复原字符}}return false;}
};
http://www.xdnf.cn/news/10339.html

相关文章:

  • flask pyinstaller打包exe,出现module not found问题
  • 论文阅读(六)Open Set Video HOI detection from Action-centric Chain-of-Look Prompting
  • 终结电源反接与压降损耗:理想二极管控制器深度解析
  • 4、数据标注的武林秘籍:Label-Studio vs CVAT vs Roboflow
  • Java求职者面试题详解:Spring、Spring Boot、MyBatis技术栈
  • unix/linux source 命令,其发展历程详细时间线、由来、历史背景
  • 宝塔专属清理区域,宝塔清理MySQL日志(高效释放空间)
  • 基于SpringBoot+Redis实现RabbitMQ幂等性设计,解决MQ重复消费问题
  • Amazon GameLift实战指南:低成本构建高并发全球游戏服务器架构
  • C++ IO流
  • ToolsSet之:XML工具
  • 用户资产化视角下开源AI智能名片链动2+1模式S2B2C商城小程序的应用研究
  • 工作流引擎-05-流程引擎(Process Engine)Camunda 8 协调跨人、系统和设备的复杂业务流程
  • 用mediamtx搭建简易rtmp,rtsp视频服务器
  • 头歌之动手学人工智能-Pytorch 之优化
  • 深入了解Vue2和Vue3的响应式原理
  • OneRef论文精读(补充)
  • 【设计模式-3.4】结构型——代理模式
  • 【位运算】两整数之和(medium)
  • DAY 34 超大力王爱学Python
  • 设计模式——责任链设计模式(行为型)
  • Linux线程同步实战:多线程程序的同步与调度
  • 在 SpringBoot+Tomcat 环境中 线程安全问题的根本原因以及哪些变量会存在线程安全的问题。
  • 代谢组数据分析(二十六):LC-MS/MS代谢组学和脂质组学数据的分析流程
  • 【Linux】shell的条件判断
  • gin 常见中间件配置
  • 系统思考:整体观和心智模式
  • Chrome 通过FTP,HTTP 调用 Everything 浏览和搜索本地文件系统
  • 基于STM32单片机CO气体检测
  • C56-亲自实现字符串拷贝函数