2 0 1 9 -6-14 星 期五 开 始 吧
上 一 题 链 接 Leetcode基础刷题之 PHP 解析(78. Subsets)
题 目 描 述
给定一个二维数组,其实可以理解成网格,然后让我们再网格中寻找是否存在指定的元素,当然它的寻找方式有点特殊,你只能在你需要匹配的当前字符串的上下左右的位置找下一个匹配的字符串,如果匹配那么继续找,就可以理解成下象棋一下 ,小兵的下一步只能左右上下?.emmmm打脸了,小兵不能后退。
题 目 分 析
所以我们需要遍历两层,第一层可以理解成行,第二层是列,先找到第一个和给定字符串第一个字母相等的位置。确定开始的位置,然后开始递归的调用,递归里面,因为是一个个去匹配的,所以我们需要知道当前匹配的是哪个字符串,另外一个当前匹配完的数不能再次利用,所以需要标记。就是因为需要考虑的情况太多,所以这道题显得很麻烦,具体看php代码。
/**
* @param String[][] $board
* @param String $word
* @return Boolean
*/
function exist($board, $word) {
if(empty($board) || empty($board[0])) return false;
for($i=0;$i<count($board);$i++){
for($j=0;$j<count($board[0]);$j++){
if($this->helper($board,$word,0,$i,$j,$visited[$i][$j])) return true;
}
}
return false;
}
function helper($board,$word,$index,$row,$col, &$visited){
//找到匹配的单词
if($index==strlen($word)) return true;
//边界的处判断以及 当前行列对应值是否和匹配的当前位置字符串相等
if($row<0 || $col <0 || $row >= count($board) || $col>=count($board[0])
|| $visited[$row][$col] || $board[$row][$col] != $word[$index] ) return false;
$visited[$row][$col]=true;
//递归调用下一个需要匹配的四个方向行列位置的变化
if($this->helper($board,$word,$index+1,$row-1,$col,$visited) || $this->helper($board,$word,$index+1,$row+1,$col,$visited)
|| $this->helper($board,$word,$index+1,$row,$col-1,$visited) || $this->helper($board,$word,$index+1,$row,$col+1,$visited)) return true;
//此路不通爷回退
$visited[$row][$col]=false;
return false;
}
Github整理地址 : https://github.com/wuqinqiang/leetcode-php
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- Apache Flink 零基础入门(一):基础概念解析
- Apache Flink 零基础入门(一):基础概念解析
- JStorm 源码解析:基础线程模型
- React Hooks 解析(上):基础
- TypeScript基础入门之模块解析(一)
- TypeScript基础入门之模块解析(二)
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
UML基础、案例与应用
施穆勒 / 李虎、赵龙刚 / 人民邮电出版社 / 2004-7-1 / 42.00元
本书教读者循序渐进地、系统地学习UML基础知识和应用技术。和前一版相比,本书内容根据UML 2.0进行了补充和更新,随书光盘包含了建模工具Poseidon的试用版。 全书分为三部分24章。第一部分“基础知识”包括第1章到第15章,主要是介绍UML语言的基础知识以及面向对象的概念和思想,还简单介绍了UML在开发过程的应用方法。第二部分“学习案例”包括第16章到第22章,结合实例详细分析了UML的应用......一起来看看 《UML基础、案例与应用》 这本书的介绍吧!