题解 | #矩阵中的路径#

矩阵中的路径

http://www.nowcoder.com/practice/2a49359695a544b8939c77358d29b7e6

import java.util.*;
public class Solution {
   
    public boolean flag=false;
    public boolean visited[][];
  // public  ArrayList<Character> arr=new ArrayList<Character>();
    StringBuilder sb=new StringBuilder();boolean next=false;
    public boolean hasPath (char[][] matrix, String word) {
        // write code here
    
        if(matrix.length==0) return false;
        visited=new boolean[matrix.length][matrix[0].length];
       
      for(int i=matrix.length-1;i>=0;i--)
      {
          if(flag==true) return true;
          for(int j=matrix[i].length-1;j>=0;j--)
        {

              dfs(matrix,i,j,word);
              if(flag==true) return true;
         }
      }
        return false;
        
    }
    void dfs(char[][] matrix,int x,int y,String word)
    {
        if(flag==true) return;
        visited[x][y]=true;
    //    arr.add(matrix[x][y]);
        
        sb.append(matrix[x][y]);
      next =  sb.charAt(sb.length()-1)!=word.charAt(sb.length()-1) ? true: false;
         
           
           
       
      //  if(tostring(a).equals(word))
        String cmp=new String(sb);
        if(cmp.equals(word))
        {
            flag=true;
            return;
        }
        //left
       if(y-1>=0 && visited[x][y-1]!=true && flag!=true && next!=true) 
       {
           dfs(matrix,x,y-1, word);
       }
        //down
         next =  sb.charAt(sb.length()-1)!=word.charAt(sb.length()-1) ? true: false;
         if(x+1<=matrix.length-1 && visited[x+1][y]!=true && flag!=true &&  next!=true)//left
       {
           dfs(matrix,x+1,y, word);
       }
        //right
         next =  sb.charAt(sb.length()-1)!=word.charAt(sb.length()-1) ? true: false;
         if(y+1<=matrix[0].length-1 && visited[x][y+1]!=true && flag!=true && next!=true)
       {
           dfs(matrix,x,y+1,word);
       }
        //up
         next =  sb.charAt(sb.length()-1)!=word.charAt(sb.length()-1) ? true: false;
         if(x-1>=0 && visited[x-1][y]!=true && flag!=true && next!=true)
       {
           dfs(matrix,x-1,y,word);
       }
      //  if(arr.size()>0)
     //   arr.remove(arr.size()-1);
        if(flag!=true)
        sb.deleteCharAt(sb.length()-1);
        visited[x][y]=false;
    }
    
  /*  String tostring(ArrayList<Character> arr)
    {
        char []c=new char[arr.size()];
    
       for(int i=0;i<arr.size();i++)
       {
           c[i]=arr.get(i);
       }
        return new String(c);
        
       
    }
    */
}

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务