IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> leetcode:矩阵中的路径 -> 正文阅读

[数据结构与算法]leetcode:矩阵中的路径

题意:给定一个 m x n 二维字符网格 board 和一个字符串单词 word 。如果 word 存在于网格中,返回 true ;否则,返回 false 。

单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。

例如,在下面的 3×4 的矩阵中包含单词 “ABCCED”(单词中的字母已标出)。

在这里插入图片描述

示例 1

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

输入:board = [[“a”,“b”],[“c”,“d”]], word = “abcd”
输出:false

实现思想:先用迭代找到 字符串的第一个元素,从此位置开始向上下左右四个位置开始递归回溯,并且,要记录已经使用的位置。

class Solution
{
    int _row;
    int _column;
    int _len;
    vector<vector<bool>> _status;// 记录矩阵中的元素是否使用

public:
    bool exist(vector<vector<char>> &board, string word)
    {
        _row = board.size();
        _len = word.size();
        if (_len == 0)
            return true;
        if (_row < 1)
        {
            return false;
        }
        _column = board[0].size();
        if (0 == _column)
        {
            return false;
        }
        for (int i = 0; i < _row; i++)
        {
            for (int j = 0; j < _column; j++)
            {
                if (board[i][j] == word[0])
                {
                     _status = vector<vector<bool>>(_row, vector<bool>(_column, false));
                    if(search(board,word,i,j,0)){
                        return true;
                    }
                }
            }
        }
        return false;
    }

    bool search(const vector<vector<char>> &board, const string &word, int x, int y, int curlen)
    {
        if (x < 0 || x >= _row)
            return false;
        if (y < 0 || y >= _column)
            return false;
        if (_status[x][y])
            return false;
        if(curlen>=_len)
            return false;

        if (board[x][y] != word[curlen])// 不相等
            return false;
        if(curlen==(_len-1)) //相等且为最后一个
            return true;
         _status[x][y] = true;
        bool ret= (search(board,word,x+1,y,curlen+1)||\
        search(board,word,x-1,y,curlen+1)||\
        search(board,word,x,y-1,curlen+1)||\
        search(board,word,x,y+1,curlen+1));

        if(!ret)
            _status[x][y]=false;//此路不通,归还使用
        return ret;
    }
};
  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2022-05-08 08:20:57  更:2022-05-08 08:24:14 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 3:33:15-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码