首页 > 编程知识 正文

leetcode 820,leetcode

时间:2023-05-06 17:16:05 阅读:53911 作者:3159

我的leet代码仓库: https://github.com/617076674/leet代码

原题链接: https://leet code-cn.com/problems/word-search/description /

主题说明:

知识点:递归、后退

想法:回溯法判断单词的存在性。 这是二维平面回溯法应用的典型例题。

我们在board数组中首先将word字符串第0个元素定位在某个二维坐标(I,j )的值上,然后从该) I,j点开始按照上下右下左4个方向的顺序查找下一个字符,如果找到了,则将该位置标记为已访问,并递归地将函数标记为

如果四个方向都找不到下一个字符,则直接返回false。

时间复杂度是递归的o(Len ) word ) )层,每层操作都是o (1)的复杂度,所以时间复杂度是o(Len ) word ) )。 另一方面,空间复杂性是递归深度,o(Len ) word ) )。

JAVA代码:

公共类解决方案{布尔ean [ ] [ ] flag; int [ ] [ ] directions={0,1 }、{ 1,0 }、{ 0,-1}、{-1,0 }; publicbooleanexist (char [ ] [ ] board,String word ) ) { int m=board.length; if(m==0) { return word.length )==0; } int n=board[0].length; flag=new boolean[m][n]; for(intI=0; i m; I ) for(intj=0; j n; j () if ) board[I][j]==word.charat(0) ) { flag[i][j]=true; if (退出) word,word,1,I,j ) { return true; } flag[i][j]=false; } }返回假; } //We have found [0,index] of word in board,tryingtofindindex1.//nowwearein (x,y ) privatebooleanexist(char ) ] is }for(intI=0; i directions.length; I ) { int newX=x directions[i][0]; int newY=y directions[i][1]; if (newx=0new xboard.length newy=0newy board [0].length ) if (! flag [ newx ] [ newy ] board [ newx ] [ newy ]==word.charat [ index ] } { flag [ newx ] [ newy ]=true; if (退出(word,word,index 1,newX,newY ) ) {返回真; } flag[newX][newY]=false; } }返回假; }} LeetCode解题报告:

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。