zoukankan      html  css  js  c++  java
  • Go语言实现:【剑指offer】矩阵中的路径

    该题目来源于牛客网《剑指offer》专题。

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

    Go语言实现:

    func hasPath(matrix []rune, rows, cols int, str []rune) bool {
    	lengthM := len(matrix)
    	lengthS := len(str)
    	if lengthM == 0 || lengthS == 0 || rows <= 0 || cols <= 0 || lengthM != rows*cols {
    		return false
    	}
    	//标记是否走过
    	//此处用数组无法指定长度,用切片操作下标越界,所以用map
    	flag := make(map[int]int)
    	//循环匹配字符
    	for i := 0; i < rows; i++ {
    		for j := 0; j < cols; j++ {
    			//找到str路径,返回true
    			if hasPathHandler(matrix, rows, cols, i, j, str, 0, flag) {
    				return true
    			}
    		}
    	}
    	return false
    }
    
    func hasPathHandler(matrix []rune, rows, cols, i, j int, str []rune, k int, flag map[int]int) bool {
    	index := i*cols + j
    	//i越界
    	//j越界
    	//矩阵元素不等于str字符
    	//矩阵元素已经走过了
    	if i < 0 || i >= rows || j < 0 || j >= cols || matrix[index] != str[k] || flag[index] == 1 {
    		return false
    	}
    	//匹配结束
    	if k == len(str)-1 {
    		return true
    	}
    	//元素匹配上,falg变为1
    	flag[index] = 1
    	//下一位匹配上下左右,返回bool,所以是或
    	if hasPathHandler(matrix, rows, cols, i-1, j, str, k+1, flag) ||
    		hasPathHandler(matrix, rows, cols, i+1, j, str, k+1, flag) ||
    		hasPathHandler(matrix, rows, cols, i, j-1, str, k+1, flag) ||
    		hasPathHandler(matrix, rows, cols, i, j+1, str, k+1, flag) {
    		return true
    	}
    	//没匹配上,当前位flag变为0,因为从下一个元素开始时,当前位有可能会成为下一位
    	flag[index] = 0
    	return false
    }
    
  • 相关阅读:
    c#冒泡排序算法和快速排序算法
    sqlserver 索引
    varchar和Nvarchar区别
    trigger
    sql语句
    超实用压力测试工具-ab工具
    js 页面离开前触发事件
    C# websocket与html js实现文件发送与接收处理
    C# socket编程 使用fleck轻松实现对话 https://github.com/statianzo/Fleck
    C# socket编程 使用udp实现单对单的连接对话
  • 原文地址:https://www.cnblogs.com/dubinyang/p/12099429.html
Copyright © 2011-2022 走看看