编程题—矩阵中的路径

题目链接

题目描述

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

解题思路
1、首先遍历第一个字母,比如对于bcced来说,先找到第一个b,然后接下来再递归找c
2、若bcced中的字母全部可以找到,则成功
3、若某个字母不匹配,则返回false即可
4、注意在遍历的时候需要将已经遍历过的位置做标记,我是直接将遍历过的字符置为1
通过代码
public class Solution {
  public boolean hasPath(char[] matrix, int rows, int cols, char[] str)
  {
  	char [][] matrix1= new char[rows][cols];
  	int k=0;
  	for(int i=0;i<rows;i++)
  		for(int j=0;j<cols;j++) {
  			matrix1[i][j]=matrix[k];
  			k++;
  		}
  	boolean res=false;
  	for(int i=0;i<rows;i++) {
  		for(int j=0;j<cols;j++) {
  			if (matrix1[i][j]==str[0]) {
  				char[][] matrixFlag=new char[rows][cols]; 				
  				for(int p=0;p<rows;p++)
  		    		for(int q=0;q<cols;q++) {
  		    			matrixFlag[p][q]=matrix1[p][q];
  		    		}
  				char[] strFlag=new char[str.length];
  				for(int p=0;p<str.length;p++)
  					strFlag[p]=str[p];
  				if (isNot(matrixFlag,rows,cols,strFlag,i,j)) return true;
  				else continue;
  			}
  		}
  	}
  	return res;
  
  }
  public boolean isNot(char[][] matrix, int rows, int cols, char[] str,int x,int y) {
  	if (x<0||x>rows-1||y<0||y>cols-1||matrix[x][y]!=str[0]) return false;
  	else if((matrix[x][y]==str[0])&&(str.length==1)) return true;
  	else {
  		char [] str1=new char[str.length-1];
  		for(int i=1,j=0;i<str.length;i++,j++) {
  			str1[j]=str[i];
  		}
  		matrix[x][y]='1';
  		return isNot(matrix, rows, cols, str1, x+1, y)||
  				isNot(matrix, rows, cols, str1, x-1, y)||
  				isNot(matrix, rows, cols, str1, x, y+1)||
  				isNot(matrix, rows, cols, str1, x, y-1);
  	}
  }
  
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值