微网站 文章,仿制手机网站教程,中国今天刚刚发生的新闻,深圳建设营销型网站前言
###我做这类文档一个重要的目的还是给正在学习的大家提供方向#xff08;例如想要掌握基础用法#xff0c;该刷哪些题#xff1f;#xff09;我的解析也不会做的非常详细#xff0c;只会提供思路和一些关键点#xff0c;力扣上的大佬们的题解质量是非常非常高滴例如想要掌握基础用法该刷哪些题我的解析也不会做的非常详细只会提供思路和一些关键点力扣上的大佬们的题解质量是非常非常高滴 习题
1.括号生成
题目链接:22. 括号生成 - 力扣LeetCode
题面:
基本分析: 这道题很经典的回溯题通过观察我们可以发现从左往右数左括号的数量都大于或者等于右括号的数量于是我们就可以定义一个递归函数来执行此过程当剩下的右括号数量为0时就表示递归结束了
代码:
class Solution {ListString ans new ArrayList();int n;public ListString generateParenthesis(int n) {this.n n;recursion(n,n,);return ans;}public void recursion(int lastleft,int lastright,String pre){if(lastright0){ans.add(pre);}if(lastleft0){recursion(lastleft-1,lastright,pre();}if(lastrightlastleft){recursion(lastleft,lastright-1,pre));}}
} 2.单词搜索
题目链接:79. 单词搜索 - 力扣LeetCode
题面:
分析:在主函数中我们遍历这个二维数组如果存在字符与单词的首字符相等那我们就进入定义好的递归函数并给这个首字符的位置打上标记避免重复读取自定义递归函数recursion有三个参数分别是xycount分别表示上一个读取点的横纵坐标和这次应该匹配word的第几个字符我们以上一次的xy作为出发点分别判断上下左右的字符是否等于words[count]如果不等就返回false如果相等就进入下一层递归在此之前需要将点打上标记出递归也别忘了将标记删除递归结束的条件就是count等于word的长度
代码:
class Solution {int n;int m;int[][] flag;char[][] board;char[] wrods;int wlen;public boolean exist(char[][] board, String word) {this.board board;wrods word.toCharArray();wlen wrods.length; n board.length;m board[0].length;flag new int[n][m];for(int i 0;in;i){for(int j 0;jm;j){if(board[i][j]wrods[0]){flag[i][j]1;boolean isTrue recursion(i,j,1);flag[i][j] 0;if(isTrue)return true;}}}return false;}public boolean recursion(int x,int y,int count){if(countwlen){return true;}boolean ans false;if(x-10board[x-1][y]wrods[count]flag[x-1][y]!1){flag[x-1][y] 1;ans recursion(x-1,y,count1)||ans;flag[x-1][y] 0;}if(x1nboard[x1][y]wrods[count]flag[x1][y]!1){flag[x1][y] 1;ans recursion(x1,y,count1)||ans;flag[x1][y] 0;}if(y-10board[x][y-1]wrods[count]flag[x][y-1]!1){flag[x][y-1] 1;ans recursion(x,y-1,count1)||ans;flag[x][y-1] 0;}if(y1mboard[x][y1]wrods[count]flag[x][y1]!1){flag[x][y1] 1;ans recursion(x,y1,count1)||ans;flag[x][y1] 0;}return false||ans;}
} 后言
上面是力扣Hot100的回溯专题下一篇是其他专题的习题希望有所帮助一同进步共勉