ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

剑指offer-12. 矩阵中的路径

2020-01-30 19:05:11  阅读:214  来源: 互联网

标签:12 return markarr offer int 矩阵 cols char rows


判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向上下左右移动一个格子。如果一条路径经过了矩阵中的某一个格子,则该路径不能再进入该格子。

public class Solution {
  private int[][] next = {{0, 1}, {0, -1}, {1, 0}, {-1, 0}};
	private int rows;
	private int cols;

	public boolean hasPath(char[] matrix, int rows, int cols, char[] str) {
		this.rows = rows;
		this.cols = cols;
		char[][] matArr = getMatrix(matrix);
		boolean[][] markarr = new boolean[rows][cols];

		for (int i = 0; i < rows; i++) {
			for (int j = 0; j < cols; j++) {
				if (backTracking(matArr, 0, i, j, str, markarr)) {
					return true;
				}
			}
		}
		return false;
	}

	private boolean backTracking(char[][] matArr, int pathlen, int r, int c, char[] str, boolean[][] markarr) {
		if (r < 0 || r >= rows || c < 0 || c >= cols || str[pathlen] != matArr[r][c] || markarr[r][c]) {
			return false;
		}
        if(pathlen == str.length-1)
            return true;
		markarr[r][c] = true;
		for (int[] n : next) {
			if (backTracking(matArr, pathlen + 1, r + n[0], c + n[1], str, markarr)) {
				return true;
			}
		}
		markarr[r][c] = false;
		return false;
	}


	private char[][] getMatrix(char[] matrix) {
		char[][] ret = new char[rows][cols];
		int index = 0;
		for (int i = 0; i < rows; i++) {
			for (int j = 0; j < cols; j++) {
				ret[i][j] = matrix[index++];
			}
		}
		return ret;
	}


}
mhHao 发布了101 篇原创文章 · 获赞 12 · 访问量 1万+ 私信 关注

标签:12,return,markarr,offer,int,矩阵,cols,char,rows
来源: https://blog.csdn.net/hmh13548571896/article/details/104117565

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有