矩阵中的路径

class Solution {
    public boolean hasPath(char[][] matrix, String str) {
        for(int i=0;i<matrix.length;i++){
            for(int j=0;j<matrix[i].length;j++){
                if(dfs(matrix,str,0,i,j)){
                    return true;
                }
            }
        }
        return false;
    }
    public boolean dfs(char[][]matrix,String str,int u,int x,int y){
        if(str.charAt(u)!=matrix[x][y])return false;
         if(u==str.length()-1)return true;
        int dx[]=new int[]{0,-1,0,1};
        int dy[]=new int[]{1,0,-1,0};
        char t=matrix[x][y];
        matrix[x][y]='*';//因为不可以重复利用,所以需要将相应的字符改变成未出现过的字符,之后再重新赋值。
        for(int i=0;i<4;i++){
           int a=x+dx[i];
           int b=y+dy[i];
           if(a>=0&&a<matrix.length&&b>=0&&b<matrix[a].length){
               if(dfs(matrix,str,u+1,a,b)) return true;
           }
        }
        matrix[x][y]=t;
        return false;
    }
}

mmp系列,这道题应该是剑指offer上的原题,因为自己用的是Java所以,需要去理解好他的逻辑之后,再写出Java版本。 

好吧,这道题目卡了我很久。在具体的矩阵中找出对应字符串的路径。

首先,以矩阵中任意字符开始都有可能,所以我们需要两层for循环来逐个实验。

具体的以b开始,则需要向四周遍历以判断周边的字符是否在对应的字符串中,代码中dfs的递归方法就是逐个的去遍历周围的字符。卡住我很长时间的点就在于dfs时应当先判断下一个字符是否在对应的str中,之后再判断符合条件的长度u是否等于对应的str的长度。dfs可以说是解决这一类问题的模板,作为回溯法的模板还是很好的。同时需要注意的是,因为对于任意一个字符,可能向其四周扩展,且每个字符只能遍历一次,所以这里需要我们将遍历过的字符用一个从未出现过的字符代替,防止字符的重复使用。当然这里也可以用一个visited数组来实现。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值