【Java】剑指Offer_编程题_矩阵中的路径

剑指Offer——编程题的Java实现(更新完毕……) 剑指Offer——编程题的Java实现 阅读详情

题目链接:https://www.nowcoder.com/questionTerminal/c61c6999eecb4b8f88a98f66b273a3cc

题目描述
请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子。如果一条路径经过了矩阵中的某一个格子,则该路径不能再进入该格子。

第一次编辑代码:

import java.util.*;
public class Solution {
    public boolean hasPath(char[] matrix, int rows, int cols, char[] str)
    {
        for(int i=0;i<matrix.length;i++){
            if(matrix[i] == str[0]){
                ArrayList<Integer> al = new ArrayList<Integer>();//visited label
                al.add(i);
                if(find(al,matrix,cols,str) == true)
                    return true;
            }
        }
        return false;
    }
    public boolean find(ArrayList<Integer> al,char[] matrix,int cols,char[] str){
        int i = al.get(al.size()-1);
        int index = al.size();
        if(index > str.length-1)
            return true;
        if(i-cols>-1 && matrix[i-cols] == str[index] && !al.contains(i-cols)){
            ArrayList<Integer> a = new ArrayList<Integer>();
            a.addAll(al);
            a.add(i-cols);
            if(find(a,matrix,cols,str) == true)
                return true;
        }
        if(i+cols<matrix.length && matrix[i+cols] == str[index] && !al.contains(i+cols)){
            ArrayList<Integer> a = new ArrayList<Integer>();
            a.addAll(al);
            a.add(i+cols);
            if(find(a,matrix,cols,str) == true)
                return true;
        }
        if(i%cols>0 && matrix[i-1] == str[index] && !al.contains(i-1)){
            ArrayList<Integer> a = new ArrayList<Integer>();
            a.addAll(al);
            al.add(i-1);
            if(find(al,matrix,cols,str) == true)
                return true;
        }
        if(i
           %cols<cols-1 && matrix[i+1] == str[index] && !al.contains(i+1)){
            ArrayList<Integer> a = new ArrayList<Integer>();
            a.addAll(al);
            al.add(i+1);
            if(find(al,matrix,cols,str) == true)
                return true;
        }
        return false;
    }
}

提交结果
答案错误:您提交的程序没有通过所有的测试用例

反思
找不到哪里有问题。。
参考了其他人的思路,自己写了下。

第二次编辑代码:

public class Solution {
    boolean[] visited = null;
    public boolean hasPath(char[] matrix, int rows, int cols, char[] str)
    {
        visited = new boolean[matrix.length];
        for(int i=0;i<rows;i++)
            for(int j=0;j<cols;j++)
                if(find(matrix,rows,cols,str,i,j,0))
                    return true;
        return false;
    }
    public boolean find(char[] matrix, int rows, int cols, char[] str,int i,int j,int index){
        if(matrix[i*cols+j] != str[index] || visited[i*cols+j])
            return false;
        if(index == str.length-1)
            return true;
        visited[i*cols+j] = true;
        if(i>0 && find(matrix,rows,cols,str,i-1,j,index+1))
            return true;
        if(i<rows-1 && find(matrix,rows,cols,str,i+1,j,index+1))
            return true;
        if(j>0 && find(matrix,rows,cols,str,i,j-1,index+1))
            return true;
        if(j<cols-1 && find(matrix,rows,cols,str,i,j+1,index+1))
            return true;
        visited[i*cols+j] = false;
        return false;
    }
}
牛客 剑指offer_编程题 详细题解 (已完结) 文章目录剑指offer_编程题【1.二维数组中的查找】【2.替换空格】C++JAVA【3.从尾到头打印链表】【4.重建二叉树】【5.用两个栈实现队列】【6.旋转数组的最小数字】暴力Sort二分法【7.斐波那契数列】【8.跳台阶】【9.变态跳台阶】 剑指offer_编程题 【1.二维数组中的查找】 【题目描述】 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都... 阅读详情

相关推荐

《剑指offer》Java版

一、引言 《剑指offer》可谓是程序猿面试的神书了,在面试中帮了我很多,大部分面试的算法题都会遇到原题或者是类似的题。但是书上的代码都是C版的,我在这里整理了一份Java版的代码供大家学习参考,这些代码我都是在OJ上跑过全AC的,所以正确性你大可放心。 二、目录 1赋值运算函数 2单例设计模式 3二维数组中查找目标值 4替换字符串中的空格 5从尾到头打印链表 6由前序和中序遍历重建二叉树 7用两...

thatkrisyang 2059

矩阵中的路径(Java实现)

本题为剑指offer面试题66 测试地址:https://www.nowcoder.com/questionTerminal/c61c6999eecb4b8f88a98f66b273a3cc 来源:牛客网 [编程题]矩阵中的路径 热度指数:28891  时间限制:1秒  空间限制:32768K 请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的

zjkC050818的博客 2233

41-dify案例分享-基于database插件实现Text2sql的数据库查询图表工作流

本文介绍基于 Text2SQL 的 Dify 工作流实现过程。先阐述 Text2SQL 概念、步骤及应用领域。接着说明工作流制作,包括用 chatflow 加开场白、获取系统时间,配置 LLM 生成 SQL,用 SQL Execute 工具查询,经 LLM 汇总结果,代码生成 ECharts 数据,条件分支判断图表类型输出。最后介绍验证测试、提供体验地址,还提及借助工具生成建表和初始化数据 SQL 语句。

个人技术 1万+

编程题:矩阵中的路径

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

TracelessLe的专栏 431

ARCGIS绘制全国各省PM2.5浓度图操作步骤

ArcGIS新手小白一枚,经常需要帮助老师绘制一些简单的空间图,利用ArcGIS绘制全国各省的pm2.5浓度图,简单又方便,不记下来会忘记~

weixin_43458484的博客 1万+

西门子S7-200 SMART PLC控制伺服电机

以下是使用西门子S7-200 SMART PLC控制伺服电机的详细程序框架和配置说明,涵盖硬件接线、PLC配置和基本运动控制逻辑。具体实现需根据伺服电机型号(如松下、三菱、台达等)调整参数。通过以上步骤,可实现伺服电机的基础位置控制。实际应用需根据设备机械参数和伺服驱动器手册调整细节。建议在调试时逐步测试脉冲输出和方向信号是否正常。

CHUXUEZHE8210的博客 6424

赛码网_在线编程_军训队列

军训队列 题目描述 某大学开学进行军训队列训练,将学生从一开始按顺序依次编号,并排成一行横队,训练的规则如下:从头开始一至二报数,凡报到二的出列剩下的依次向前靠拢,再从头开始进行一至三报数,凡报到三的出列,剩下的依次向前靠拢,继续从头开始进行一至二报数。。。以后每次从头开始轮流进行一至二报数、一至三报数直到剩下的人数不超过三人为止。 输入

miaowangbing的博客 2032

Android息屏后台任务保活实战:从定时器失效到厂商白名单破解

本文深入探讨了Android应用在息屏后定时任务失效的根源,即系统为省电而触发的休眠机制。文章提供了从传统方案失效分析到实战破解的完整路径,核心在于引导用户将应用加入电池优化白名单并开启自启动权限,从而合法绕过限制。同时,结合WorkManager、AlarmManager等可靠定时方案,实现稳定的后台任务执行。

weixin_28475533的博客 422

图10——判断顶点u和顶点v是否存在简单路径

已有邻接表表示的有向图,编程判断从顶点u到顶点v是否存在简单路径若有,则打印出该路径上的顶点。要求先描述图中的存储结构,并简述算法思路;查找邻接顶点等图运算要自己实现(尽量采用非递归算法) 【分析】 这是浙江大学考研试题。主要考查图的广度优先遍历。通过从顶点u开始对图进行广度优先遍历,如果访问到顶点v,则说明从顶点u到顶点v存在一条路径。因为在图的遍历过程中,要求每个顶点只能访问一次,所以该路径...

凌空的桨 5380

python123题目——摩尔斯电码转换

类型:列表元组。

m0_62488776的博客 4416

windows 10 等保3级配置核查与加固(附自动化加固脚本)

关闭注册表编辑器,然后重新启动计算机。\\r\\n 对于OPC通讯站(server\\\\client),【密码最长存留期】需要设置为0,即密码不过期。‌445端口‌:修改注册表禁用。打开命令提示符,运行命令“gpedit.msc”打开组策略编辑器,浏览到路径“本地计算机策略\\\\计算机配置\\\\Windows设置\\\\安全设置\\\\本地策略\\\\安全选项”,在右边窗格中找到“Microsoft网络客户端:将未加密的密码发送到第三方SMB服务器”,双击,配置为“已禁用”,确定。

悦分享 160

【编程题】矩阵中的路径(java实现)

【编程题】矩阵中的路径(java实现) 题目来源 剑指offer https://www.nowcoder.com/practice/c61c6999eecb4b8f88a98f66b273a3cc?tpId=13&tqId=11218&rp=4&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-...

qq_40432108的博客 602

5.17华为OD机试真题 新系统 - 输出二叉树后序遍历结果 (Java/Py/C/C++/Js/Go)

5.17华为OD机试真题 新系统 - 输出二叉树后序遍历结果 (Java/Py/C/C++/Js/Go)

算法大师! 516

《剑指offer》66道算法题合集(java实现)

1

weixin_43774841的博客 2万+

Vue3 + uniapp 踩坑:iOS 真机调试一直报错Maximum call stack size exceeded,和(in promise)MiniProgramError err的解决方法

不是你写错代码,是微信开发工具和 iOS 真机调试的兼容问题。开个空项目都报错,勾个设置就没问题,不是你,是工具的锅。

代码简单说 Vue、JAVA、PHP、Node.js 熟练运用,接口、架构、性能全搞定。 1265

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

【剑指offer】Java版代码(完整版)

一、引言 《剑指offer》可谓是程序猿面试的神书了,在面试中帮了我很多,大部分面试的算法题都会遇到原题或者是类似的题。但是书上的代码都是C版的,我在这里整理了一份Java版的代码供大家学习参考,这些代码我都是在OJ上跑过全AC的,所以正确性你大可放心。 二、目录 赋值运算函数 单例设计模式 二维数组中查找目标值 替换字符串中的空格 从尾到头打印链表 由前序和中序遍历重建二叉树 用两个

白夜行 7万+

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

剑指 Offer 12. 矩阵中的路径

后端小知识 带你玩算法

小知识吖 3万+

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

剑指offer题解(矩阵中的路径)

剑指offer题解(矩阵中的路径): 题目组链接:https://www.nowcoder.com/ta/coding-interviews 本题知识点:dfs,回溯。 思路:深度遍历,设置一个与矩阵同等大小的布尔数组,用来存储矩阵中对应的坐标元素的访问情况。每一个节点都当做遍历的入口,当有一个字符匹配成功之后,先flag标记数组中的下标位置为true,接着继续遍历当前坐标的上、下、左、右四个方向(保证若坐标对应的的flag为false才能够继续访问,否则视为已经访问过。不可重复访问,否则就会无限循环),判

lk990908的博客 216

LeetCode 之 剑指 Offer 12. 矩阵中的路径(Java)

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

渣渣的夏天 637

java 版剑指offer算法集锦,java面试编程题及答案

由于篇幅限制,小编在此截出几张知识讲解的图解[外链图片转存中…(img-sIf8ITFW-1711909849838)][外链图片转存中…(img-LLssK4ha-1711909849838)][外链图片转存中…(img-ruSl3rB5-1711909849839)][外链图片转存中…(img-Aa2EoBWz-1711909849839)]

2401_84003839的博客 953

剑指 Offer 12. 矩阵中的路径 java dfs

题目描述 请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一格开始,每一步可以在矩阵中向左、右、上、下移动一格。如果一条路径经过了矩阵的某一格,那么该路径不能再次进入该格子。例如,在下面的3×4的矩阵中包含一条字符串“bfce”的路径(路径中的字母用加粗标出)。 [[“a”,“b”,“c”,“e”], [“s”,“f”,“c”,“s”], [“a”,“d”,“e”,“e”]] 但矩阵中不包含字符串“abfb”的路径,因为字符串的第一个字符b占据了矩阵中的第一

木竹的博客 166

17. leetCode--剑指Offer12矩阵中的路径

请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一格开始,每一步可以在矩阵中向左、右、上、下移动一格。如果一条路径经过了矩阵的某一格,那么该路径不能再次进入该格子。

weixin_45267102的博客 221

剑指offer--Java实现

剑指offer合辑之面试01-67 《剑指offer》面试题 Java 代码的 Github 地址 《剑指offer》面试题 Markdown 版本,包含题目、分析及代码的 Github 地址 面试题2 实现单例模式 面试题3 二维数组中的查找 面试题4 替换空格 面试题5 从尾到头打印链表 面试题6 重建二叉树 面试题7 用两个栈实现队列 面试题8 旋转数组的最小数字 面试题9 斐波那契数列...

LYZ 4109

剑指Offer:矩阵中的路径

1、题目 请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中任意一格开始,每一步可以在矩阵中间向左、右、上、下移动一格。如果一条路径经过了矩阵的某一格,那么该路径不能再次进入该格子。 例如在下面的3*4的矩阵中包含一条字符串"bfce"的路径(路径中的字母用下划线标出)。但矩阵中不包含字符串"abfb"的路径,因为字符串的第一个字符b占据...

AlphaWun的博客 328

剑指offer(第二版)——矩阵中的路径

PS:《剑指offer》是很多同学找工作都会参考的一本面试指南,同时也是一本算法指南(为什么它这么受欢迎,主要应该是其提供了一个循序渐进的优化解法,这点我觉得十分友好)。现在很多互联网的算法面试题基本上可以在这里找到影子,为了以后方便参考与回顾,现将书中例题用Java实现(第二版),欢迎各位同学一起交流进步。 GitHub: https://github.com/Uplpw/SwordOffer。 完整题目链接: https://blog.youkuaiyun.com/qq_41866626/article/detai

qq_41866626的博客 288
上一篇: 【Java】剑指Offer_编程题_数据流中的中位数
下一篇: 【Java】剑指Offer_编程题_机器人的运动范围
includei
博客等级 码龄9年 406粉丝 71原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值