请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子。
2017-12-16 16:07
1501 查看
请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子。如果一条路径经过了矩阵中的某一个格子,则该路径不能再进入该格子。 例如 a b c e s f c s
a d e e 矩阵中包含一条字符串"bcced"的路径,但是矩阵中不包含"abcb"路径,因为字符串的第一个字符b占据了矩阵中的第一行第二个格子之后,路径不能再次进入该格子。
public class Solution {
public boolean hasPath(char[] matrix, int rows, int cols, char[] str)
{
boolean bool[][] = new boolean[rows][cols];
int len=0;//字符串中参与比较的字符所在的下标
for(int row =0; row < rows; row++){
for(int col =0; col < cols; col++){//
if(hasPathCore(matrix, rows, cols, str,
row, col, len, bool))
return true;
}
}
return false;
}
public boolean hasPathCore(char[] matrix, int rows, int cols, char[] str,
int row, int col, int len, boolean[][] bool){
//递归的结构
if(len==str.length){
return true;
}
boolean hasPath= false;
if(row >= 0 && row < rows && col >=0 && col< cols && !bool[row][col]
&& str[len]==matrix[row*cols+col]){
bool[row][col]=true;//标记为走过
len++;
hasPath= hasPathCore(matrix, rows, cols, str, row+1, col, len, bool)
|| hasPathCore(matrix, rows, cols, str, row-1, col, len, bool)
|| hasPathCore(matrix, rows, cols, str, row, col+1, len, bool)
|| hasPathCore(matrix, rows, cols, str, row, col-1, len, bool);
if(hasPath==false){
//row行col列节点不满足,下次递归不再经过
bool[row][col]=false;
}
}
return hasPath;
}
}
a d e e 矩阵中包含一条字符串"bcced"的路径,但是矩阵中不包含"abcb"路径,因为字符串的第一个字符b占据了矩阵中的第一行第二个格子之后,路径不能再次进入该格子。
public class Solution {
public boolean hasPath(char[] matrix, int rows, int cols, char[] str)
{
boolean bool[][] = new boolean[rows][cols];
int len=0;//字符串中参与比较的字符所在的下标
for(int row =0; row < rows; row++){
for(int col =0; col < cols; col++){//
if(hasPathCore(matrix, rows, cols, str,
row, col, len, bool))
return true;
}
}
return false;
}
public boolean hasPathCore(char[] matrix, int rows, int cols, char[] str,
int row, int col, int len, boolean[][] bool){
//递归的结构
if(len==str.length){
return true;
}
boolean hasPath= false;
if(row >= 0 && row < rows && col >=0 && col< cols && !bool[row][col]
&& str[len]==matrix[row*cols+col]){
bool[row][col]=true;//标记为走过
len++;
hasPath= hasPathCore(matrix, rows, cols, str, row+1, col, len, bool)
|| hasPathCore(matrix, rows, cols, str, row-1, col, len, bool)
|| hasPathCore(matrix, rows, cols, str, row, col+1, len, bool)
|| hasPathCore(matrix, rows, cols, str, row, col-1, len, bool);
if(hasPath==false){
//row行col列节点不满足,下次递归不再经过
bool[row][col]=false;
}
}
return hasPath;
}
}
相关文章推荐
- 请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子。如果一条路径经过了矩阵中的某一个格子,则该路径不能再进入该格子。 例如 a b c e s f c s a d e e 矩阵中包含一条字符串"bccced"的路径,但是矩阵中不包含"abcb"路径,因为字符串的第一个字符b占据了矩阵中
- 判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子。如果一条路径经过了矩阵中的某一个格子,则该路径不能再进
- 请实现一个函数用来匹配包括'.'和'*'的正则表达式。模式中的字符'.'表示任意一个字符,而'*'表示它前面的字符可以出现任意次(包含0次)。 在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字
- 请实现一个函数用来匹配包括'.'和'*'的正则表达式。模式中的字符'.'表示任意一个字符,而'*'表示它前面的字符可以出现任意次(包含0次)。 在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字符串"aaa"与模式"a.a"和"ab*ac*a"匹配,但是与"aa.a"和"ab*a"均不匹配
- 请实现一个函数用来匹配包括'.'和'*'的正则表达式。模式中的字符'.'表示任意一个字符,而'*'表示它前面的字符可以出现任意次(包含0次)。 在本题中,匹配是指字符串的所有字符匹配整个模式。
- 请实现一个函数用来匹配包括'.'和'*'的正则表达式。模式中的字符'.'表示任意一个字符,而'*'表示它前面的字符可以出现任意次(包含0次)。 在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字
- 判断一个矩阵中是否可以找到一条包含某个String的路径
- 开发一个坐标计算工具, A表示向左移动,D表示向右移动,W表示向上移动,S表示向下移动。从(0,0)点开始移动,从输入字符串里面读取一些坐标,并将最终输入结果输出到输出文件里面。
- 开发一个坐标计算工具, A表示向左移动,D表示向右移动,W表示向上移动,S表示向下移动。从(0,0)点开始移动,从输入字符串里面读取一些坐标,并将最终输入结果输出到输出文件里面。
- 牛客网 小东所在公司要发年终奖,而小东恰好获得了最高福利,他要在公司年会上参与一个抽奖游游戏在一个6*6的棋盘上进行,上面放着36个价值不等的礼物,每个小的棋盘上面放置着一个礼物,他需要从左上角开始游戏,每次只能向下或者向右移动一步,到达右下角停止,一路上的格子里的礼物小东都能拿到,请设计一个算法使小东拿到价值最高的礼物
- 1.实现一个函数,可以左旋字符串中的k个字符。 AABCD左旋一个字符得到ABCDA AABCD左旋两个字符得到BCDAA 2.判断一个字符串是否为另外一个字符串旋转之后的字符串。 例如:给定s1
- [LintCode]判断一个字符串是否包含另一个字符串的所有字符
- 算法4— 判断一个字符串里是否包含另一个字符串所有的字符
- 判断一个字符串里是否包含另一个字符串所有的字符
- oracle的常用函数 instr() 和substr()函数 博客分类: oracle 在Oracle中 可以使用instr函数对某个字符串进行判断,判断其是否含有指定的字符。 在一个
- 设计函数,输入为一个字符串,里边包含中文、英文、数字等字符,编码为GBK。中文字符的编码规则假定为:双字节组成,高字节大于0x80,低字节任意。
- 1.实现一个函数,可以左旋字符串中的k个字符。 AABCD左旋一个字符得到ABCDA AABCD左旋两个字符得到BCDAA 2.判断一个字符串是否为另外一个字符串旋转之后的字符串。 例如:给定s1
- 判断一个字符串里是否包含另一个字符串所有的字符
- c++,二维数组中的数值代表金币数,从左上角出发,只能向下或者向右移动,判断是否存在获取指定金币数值N的路径
- 怎么判断字符串中是否包含一组字符的任意一个字符及判断字符串是否只含字母和数字