auto commit

This commit is contained in:
CyC2018 2018-02-27 15:53:03 +08:00
parent 05247b4e61
commit 599d26aa99

View File

@ -425,36 +425,35 @@ public int minNumberInRotateArray(int[] array) {
**ÌâÄ¿ÃèÊö**
请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子。如果一条路径经过了矩阵中的某一个格子,则该路径不能再进入该格子。 例如 a b c e s f c s a d e e 矩阵中包含一条字符串 "bcced" 的路径,但是矩阵中不包含 "abcb" 路径,因为字符串的第一个字符 b 占据了矩阵中的第一行第二个格子之后,路径不能再次进入该格子。
请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子。如果一条路径经过了矩阵中的某一个格子,则该路径不能再进入该格子。例如 a b c e s f c s a d e e 矩阵中包含一条字符串 "bcced" 的路径,但是矩阵中不包含 "abcb" 路径,因为字符串的第一个字符 b 占据了矩阵中的第一行第二个格子之后,路径不能再次进入该格子。
```java
private int[][] next = {{0, -1}, {0, 1}, {-1, 0}, {1, 0}};
public boolean hasPath(char[] matrix, int rows, int cols, char[] str) {
if (rows == 0 || cols == 0) return false;
public boolean hasPath(char[] matrix, int rows, int cols, char[] str){
if(rows == 0 || cols == 0) return false;
char[][] m = new char[rows][cols];
for (int i = 0, idx = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
for(int i = 0, idx = 0; i < rows; i++) {
for(int j = 0; j < cols; j++) {
m[i][j] = matrix[idx++];
}
}
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
if (backtracking(m, rows, cols, str, new boolean[rows][cols], 0, i, j)) return true;
for(int i = 0; i < rows; i++) {
for(int j = 0; j < cols; j ++) {
if(backtracking(m, rows, cols, str, new boolean[rows][cols], 0, i, j)) return true;
}
}
return false;
}
private boolean backtracking(char[][] m, int rows, int cols, char[] str, boolean[][] used, int path, int r, int c) {
if (path == str.length) return true;
if (r < 0 || r >= rows || c < 0 || c >= cols) return false;
if (m[r][c] != str[path]) return false;
if (used[r][c]) return false;
if(path == str.length) return true;
if(r < 0 || r >= rows || c < 0 || c >= cols) return false;
if(m[r][c] != str[path]) return false;
if(used[r][c]) return false;
used[r][c] = true;
for (int i = 0; i < next.length; i++) {
if (backtracking(m, rows, cols, str, used, path + 1, r + next[i][0], c + next[i][1])) return true;
for(int i = 0; i < next.length; i++) {
if(backtracking(m, rows, cols, str, used, path + 1, r + next[i][0], c + next[i][1])) return true;
}
used[r][c] = false;
return false;