首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >矩阵中的路径

矩阵中的路径

作者头像
名字是乱打的
发布于 2021-12-22 07:01:33
发布于 2021-12-22 07:01:33
1.5K00
代码可运行
举报
文章被收录于专栏:软件工程软件工程
运行总次数:0
代码可运行
题目描述

请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子。如果一条路径经过了矩阵中的某一个格子,则该路径不能再进入该格子。 例如 a b c e s f c s a d e e 矩阵中包含一条字符串"bcced"的路径,但是矩阵中不包含"abcb"路径,因为字符串的第一个字符b占据了矩阵中的第一行第二个格子之后,路径不能再次进入该格子。

思路

回溯法: 对于此题,我们需要设置一个判断是否走过的标志数组,长度和矩阵大小相等

我们对于每个结点都进行一次judge判断,且每次判断失败我们应该使标志位恢复原状即回溯

judge里的一些返回false的判断:

  • 如果要判断的(i,j)不在矩阵里
  • 如果当前位置的字符和字符串中对应位置字符不同
  • 如果当前(i,j)位置已经走过了

否则先设置当前位置走过了,然后判断其向上下左右位置走的时候有没有满足要求的.

最后如果上面所有判断都没返回true,则最后恢复原状态

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    public boolean hasPath(char[] matrix, int rows, int cols, char[] str)
    {
        int[] flags=new int[matrix.length]; //用1标志走过
        for(int i=0;i<rows;i++){
            for(int j=0;j<cols;j++){
                boolean res = helper(matrix, rows, cols, i, j, 0, str, flags);
                if (res) return true;
            }
        }
        return false;
    }
    //k指当前匹对的字串下标
    public boolean helper(char[]matrix,int rows,int cols,int i,int j,int k,char[]str,int[]flag){
        int curr=i*cols+j;
        if (i<0||i>=rows||j<0||j>=cols||flag[curr]==1||matrix[curr]!=str[k]) return false;
        if (k==str.length-1) return true;

        flag[curr]=1;

        if (helper(matrix,rows,cols,i+1,j,k+1,str,flag)||helper(matrix,rows,cols,i-1,j,k+1,str,flag)||
                helper(matrix,rows,cols,i,j+1,k+1,str,flag)||helper(matrix,rows,cols,i,j-1,k+1,str,flag)
        )return true;

        flag[curr]=0;
        return false;
    }
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019/12/16 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
《剑指offer》– 回溯法:矩阵中的路径、机器人的运动范围
请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子。如果一条路径经过了矩阵中的某一个格子,则之后不能再次进入这个格子。 例如 a b c e s f c s a d e e 这样的3 X 4 矩阵中包含一条字符串”bcced”的路径,但是矩阵中不包含”abcb”路径,因为字符串的第一个字符b占据了矩阵中的第一行第二个格子之后,路径不能再次进入该格子。
全栈程序员站长
2021/12/23
2140
每日一刷《剑指offer》字符串篇之第一个只出现一次的字符
在一个长为 字符串中找到第一个只出现一次的字符,并返回它的位置, 如果没有则返回 -1(需要区分大小写).(从0开始计数)
终有救赎
2023/11/14
2110
每日一刷《剑指offer》字符串篇之第一个只出现一次的字符
【剑指Offer】12. 矩阵中的路径
判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向上下左右移动一个格子。如果一条路径经过了矩阵中的某一个格子,则该路径不能再进入该格子。
瑞新
2020/12/07
3550
剑指Offer(六十五)-- 矩阵中的路径(经典回溯法)
请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子。如果一条路径经过了矩阵中的某一个格子,则该路径不能再进入该格子。例如矩阵
秦怀杂货店
2022/02/15
7530
剑指Offer(六十五)-- 矩阵中的路径(经典回溯法)
每天一道剑指offer-矩形中的路径
请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子。如果一条路径经过了矩阵中的某一个格子,则之后不能再次进入这个格子。 例如 a b c e s f c s a d e e 这样的3 X 4 矩阵中包含一条字符串"bcced"的路径,但是矩阵中不包含"abcb"路径,因为字符串的第一个字符b占据了矩阵中的第一行第二个格子之后,路径不能再次进入该格子。
乔戈里
2019/03/04
4540
Sword To Offer 065 - 矩阵中的路径
请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子。如果一条路径经过了矩阵中的某一个格子,则该路径不能再进入该格子。 例如 a b c e s f c s a d e e 矩阵中包含一条字符串”bcced”的路径,但是矩阵中不包含”abcb”路径,因为字符串的第一个字符b占据了矩阵中的第一行第二个格子之后,路径不能再次进入该格子。
Reck Zhang
2021/08/11
2900
剑指offer 12:矩阵中的路径
请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子。如果一条路径经过了矩阵中的某一个格子,则该路径不能再进入该格子。 例如
用户1148523
2020/03/18
4170
剑指offer 12:矩阵中的路径
剑指65-矩阵中的路径
虽说是使用深度遍历,但是我没想好要怎么判断字符串是否匹配,所以一下代码时题解看到的,巧妙的时,使用两个数组可以表示上下左右的元素,而且不需要额外数组表示是否遍历过,将遍历过的位置用一个特殊字符’#’替换
opencode
2022/12/26
2630
剑指offer 矩阵中的路径
请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子。如果一条路径经过了矩阵中的某一个格子,则之后不能再次进入这个格子。 例如 a b c e s f c s a d e e 这样的3 X 4 矩阵中包含一条字符串"bcced"的路径,但是矩阵中不包含"abcb"路径,因为字符串的第一个字符b占据了矩阵中的第一行第二个格子之后,路径不能再次进入该格子。
week
2019/04/09
4770
剑指offer(61-67)题解
例如,我们可以把一个只有根节点为1的二叉树序列化为"1,",然后通过自己的函数来解析回这个二叉树
萌萌哒的瓤瓤
2020/08/26
3300
剑指offer(61-67)题解
剑指Offer - 面试题12. 矩阵中的路径(DFS回溯)
请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一格开始,每一步可以在矩阵中向左、右、上、下移动一格。如果一条路径经过了矩阵的某一格,那么该路径不能再次进入该格子。例如,在下面的3×4的矩阵中包含一条字符串“bfce”的路径。
Michael阿明
2020/07/13
3640
剑指 offer 面试题精选图解 12. 矩阵中的路径
请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一格开始,每一步可以在矩阵中向左、右、上、下移动一格。如果一条路径经过了矩阵的某一格,那么该路径不能再次进入该格子。例如,在下面的 3×4 的矩阵中包含一条字符串 “bfce” 的路径(路径中的字母用加粗标出)。
五分钟学算法
2020/06/09
5470
剑指offer(47-67题)终极篇
思路: 这题首先要理解题意吧。题目就是给了两个操作,insert和FirstAppearingOnce两个函数,至于一些其他需要你自己实现。你可以选择字符数组、或者String做容器储存。这里我是用StringBuider储存。
bigsai
2020/02/19
4960
LeetCode-面试题12-矩阵中的路径
请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一格开始,每一步可以在矩阵中向左、右、上、下移动一格。如果一条路径经过了矩阵的某一格,那么该路径不能再次进入该格子。例如,在下面的3×4的矩阵中包含一条字符串“bfce”的路径(路径中的字母用加粗标出)。
benym
2022/07/14
3290
回溯算法 - 机器人的运动范围
有一个矩阵,机器人可以从坐标(0,0)的格子开始移动,它每次可以向左、右、上、下移动一格,但是不能进入行坐标和列坐标的数位之和大于K的格子,求这个机器人总共能走多少个格子以及它的行动轨迹。
神奇的程序员
2022/04/10
4850
回溯算法 - 机器人的运动范围
python-剑指offer41-62
牛客最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上。同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思。例如,“student. a am I”。后来才意识到,这家伙原来把句子单词的顺序翻转了,正确的句子应该是“I am a student.”。Cat对一一的翻转这些单词顺序可不在行,你能帮助他么?
西西嘛呦
2020/08/26
4790
【算法题解】 Day29 搜索与回溯
给定一个 m x n 二维字符网格 board 和一个字符串单词 word 。如果 word 存在于网格中,返回 true ;否则,返回 false 。
sidiot
2023/08/31
2000
【算法题解】 Day29 搜索与回溯
Two Sigma:面试真题 - 编程(下)
量化投资与机器学习微信公众号,是业内垂直于量化投资、对冲基金、Fintech、人工智能、大数据等领域的主流自媒体。公众号拥有来自公募、私募、券商、期货、银行、保险、高校等行业30W+关注者,荣获2021年度AMMA优秀品牌力、优秀洞察力大奖,连续2年被腾讯云+社区评选为“年度最佳作者”。 上一起,QIML为大家分享几道有关Two Sigma面试的计算真题。今天,我们主要为大家分享几道编程真题。 Two Sigma:面试真题(上) 量化对冲基金技术面试中一般都会有pair coding的部分,主要是测试候选
量化投资与机器学习微信公众号
2022/09/22
1K0
Two Sigma:面试真题 - 编程(下)
剑指offer 第十二天
58.对称的二叉树 请实现一个函数,用来判断一颗二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。 /* public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val; } } */ public class Solution {
10JQKA
2018/05/09
6140
【好书推荐】《剑指Offer》之硬技能(编程题12~16)
题目:请设计一个函数,用来判断一个矩阵中是否存在一条包含其字符串所有字符的路径。路径可以从矩阵中的任意一格开始,每一步可以在矩阵中向左、右、上、下移动一格。如果一条路径经过了矩阵的某一格,那么该路径不能再次进入该格子。
用户1148394
2019/06/21
3920
相关推荐
《剑指offer》– 回溯法:矩阵中的路径、机器人的运动范围
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档