LeetCode—<搜索与回溯专项>剑指 Offer 12、13、34、36、54

剑指 Offer 12. 矩阵中的路径、13. 机器人的运动范围、34. 二叉树中和为某一值的路径、36. 二叉搜索树与双向链表、54. 二叉搜索树的第k大节点

题目描述:
[12]
给定一个 m x n 二维字符网格 board 和一个字符串单词 word 。如果 word 存在于网格中,返回 true ;否则,返回 false 。
单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。
[13]
地上有一个m行n列的方格,从坐标 [0,0] 到坐标 [m-1,n-1] 。一个机器人从坐标 [0, 0] 的格子开始移动,它每次可以向左、右、上、下移动一格(不能移动到方格外),也不能进入行坐标和列坐标的数位之和大于k的格子。例如,当k为18时,机器人能够进入方格 [35, 37] ,因为3+5+3+7=18。但它不能进入方格 [35, 38],因为3+5+3+8=19。请问该机器人能够到达多少个格子?
[34]
给你二叉树的根节点 root 和一个整数目标和 targetSum ,找出所有 从根节点到叶子节点 路径总和等于给定目标和的路径。
叶子节点 是指没有子节点的节点。
[36]

在这里插入图片描述

[54]
给定一棵二叉搜索树,请找出其中第 k 大的节点的值。
在这里插入图片描述

考察重点
第12题首先遍历数组找到起始位置,再使用dfs搜索符合题意的路径
第13题使用mark数组记录当前位置是否被访问过,定义isLegal判断x,y是否越界是否被访问过并且是否符合题意,最后向右向下遍历矩阵:dfs(右)+dfs(下)+1
第34题标准递归回溯找寻所有情况,依次深度遍历整个树即可。
第36题引入一个新节点head记录递归的上一节点,和当前节点root相互指向即可。最后需要用recHead记录头结点并和尾结点相互指向。
第54题以“先右再中再左”的顺序遍历树,遍历到“中”时–k,当k为0时,说明当前节点为第k大节点。

第12题

    int[][] way = new int[][]{{0, 1}, {0, -1}, {1, 0}, {-1, 0}};public boolean dfs(char[][] board, int nowPos, String target, int x, int y){if(nowPos >= target.length())return true;char targetWord = target.charAt(nowPos);for(int i = 0;i < 4;i ++){char nowWord = board[x][y];board[x][y] = '0';x += way[i][0];y += way[i][1];if(x >= 0 && x < board.length && y >= 0 && y < board[0].length && nowWord == targetWord && dfs(board, nowPos + 1, target, x, y))return true;x -= way[i][0];y -= way[i][1];board[x][y] = nowWord;}return false;}public boolean exist(char[][] board, String word) {char mark = word.charAt(0);for(int i = 0;i < board.length;i ++)for(int j = 0;j < board[0].length;j ++){if(mark == board[i][j]){if(dfs(board, 0, word, i, j) || (word.length() == 1))return true;}}return false;}

第13题

    int[][] mark;public boolean isLegel(int x, int y, int k){if(x >= mark.length || x < 0 || y >= mark[0].length || y < 0 || mark[x][y] == 1)return false;return k >= x % 10 + x / 10 + y % 10 + y / 10;}public int dfs(int x, int y, int k){if(!isLegel(x, y, k))return 0;mark[x][y] = 1;return dfs(x + 1, y, k) + dfs(x, y + 1, k) + 1;}public int movingCount(int m, int n, int k) {mark = new int[m][n];return dfs(0, 0, k);}

第34题

    List<List<Integer>> res;public int dfs(TreeNode root, List<Integer> list, int target){if(root.right == null && root.left == null && target == 0){res.add(new ArrayList<Integer>(){{addAll(list);}});return 0;}if(root.right != null){list.add(root.right.val);dfs(root.right, list, target - root.right.val);list.remove(list.size()-1);}if(root.left != null){list.add(root.left.val);dfs(root.left, list, target - root.left.val);list.remove(list.size()-1);}return 0;}public List<List<Integer>> pathSum(TreeNode root, int target) {res = new ArrayList<>();if(root == null)return res;dfs(root, new ArrayList<Integer>(){{add(root.val);}}, target - root.val);return res;}

第36题

    Node head = new Node();Node recHead = head;public void dfs(Node root){if(root.left != null)dfs(root.left);head.right = root;root.left = head;head = head.right;if(root.right != null)dfs(root.right);}public Node treeToDoublyList(Node root) {if(root == null){return null;}dfs(root);head.right = recHead.right;recHead.right.left = head;return recHead.right;}

第54题

    int rec;public int dfs(TreeNode root){if(root == null)return 0;int a = dfs(root.right);if(--rec == 0){return root.val;}int b = dfs(root.left);return Math.max(a, b);}public int kthLargest(TreeNode root, int k) {rec = k;return dfs(root);}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/263217.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

导数--基本概念

转载于:https://www.cnblogs.com/liuys635/p/11242741.html

解决IE6、IE7、Firefox兼容最简单的CSS Hack

写三句代码来控制一个属性&#xff0c;区别Firefox&#xff0c;IE7&#xff0c;IE6&#xff1a; background:orange; *background:green !important; *background:blue; 说明&#xff1a;这段代码会使在Firefox中&#xff0c;背景呈橙色&#xff1b;IE7中为绿色&#xf…

[导入]创建、查询、修改带名称空间的 XML 文件的例子

XML的应用越来越广泛了&#xff0c;如Vista、Flex编程都将使用 XML&#xff0c;正确掌握XML的各种操作&#xff0c;对提高编程效率至关重要。下面就是一个综合处理带名称空间的XML的例子。 文章来源:http://blog.csdn.net/net_lover/archive/2006/12/18/1447434.aspx 转载于:ht…

Kernel那些事儿之内存管理(2) --- 百闻不如一见

上次介绍了物理内存管理中三位主要人物中的node 和zone。这两位是当官的&#xff0c;一个是县长&#xff0c;一个是里长&#xff0c;不敢不先介绍啊。接下来出场的就是我们的老百姓了 --- page frame。Page frame是物理内存的基本组成单位&#xff0c;在Kernel中由结构体 struc…

LeetCode—<排序专项>剑指 Offer 40、41、45、61

剑指 Offer 40. 最小的k个数、41. 数据流中的中位数、45. 把数组排成最小的数、61. 扑克牌中的顺子 题目描述&#xff1a; [40] 输入整数数组 arr &#xff0c;找出其中最小的 k 个数。例如&#xff0c;输入4、5、1、6、2、7、3、8这8个数字&#xff0c;则最小的4个数字是1、2…

归并 快排 快速幂

/* 归并排序&#xff1a;不断将数组切分为两部分递归切分直到数组长度为1&#xff0c;之后逐渐有序合并 */ #include <cstdio> #include <iostream> #include <cmath> using namespace std;//归并 小-->大 void Merge(int a[], int s, int m, int e, int …

dev GridControl双击行事件

今天用到了gridcontrol这个控件,要求写一个gridview的双击事件,因为想要的效果是只双击行才出Message,用gridview的Double_Click我没实现,后来想到MouseDown,一试,很简单,首先,仍旧需要将gridview1.OptionsBehavior.Editable设为false,下面是代码: Skelta BPM.NET&#xff08…

自己动手编写一个ajax extender

该扩展的功能有以下几点&#xff1a;1、当鼠标移到某个按钮上时&#xff0c;该按钮显示一个Css样式&#xff1b;2、当鼠标移开该按钮时&#xff0c;该按钮显示另外一个Css样式&#xff1b;3、当鼠标点击该按钮时&#xff0c;执行一个用户自己定义的javascript函数&#xff1b; …

jQuery:表格的奇偶行变色,jquery实例之表格隔一行

jQuery:表格的奇偶行变色<html> <head> <title>表格变色</title> <style type"text/css"> .odd{background:#ffffee;} .even{background:#fff38f;} .first{background:red;} .last{background:blue;}…

分金币 Uva 11300

题意 给定N个人成环状坐&#xff0c;每个人初始分配Ai的金币&#xff0c;金币总数可以被N整除&#xff0c;每个人可以给左右相邻的人一定数量的金币使得最终每个人的金币数量相同&#xff0c;求转移数量最小的方案所转移的总金币数量。 N<1000000 对每组数据保证输出在INT64…

LeetCode—<搜索与回溯专项>剑指 Offer 55 - I、55 - II、64、68 - I、68 - II

剑指 Offer 55 - I. 二叉树的深度、55 - II. 平衡二叉树、64. 求12…n、68 - I. 二叉搜索树的最近公共祖先、68 - II. 二叉树的最近公共祖先 题目描述&#xff1a; [55 - I] [55 - II] [64] 求 12…n &#xff0c;要求不能使用乘除法、for、while、if、else、switch、case等关…

Tip:使用Extender的ResolveControlID事件

1、分析 不知道大家在使用ASP.NET AJAX Control Toolkit里的各个Extender控件时&#xff0c;有没有接触过ResolveControlID事件&#xff1f;这个事件在官方也只用了很少的笔墨来描述。的确&#xff0c;这个事件不太常用&#xff0c;看看ASP.NET AJAX的演示站点&#xff0c;根本…

我常用的shell命令

我常用的shell命令tar:tar jxvf filename.tar.bz2tar xvf filename.tartar cvf filename.tar file tar cjvf filename.tar.bz2 file wc:ls -l | wc -ltr:ls -l | tr a-z A-Zgrep:ls -l | grep ^dls -l | grep -n ^dls -l | grep -v ^decho "theaaaathebbbbthe | grep \<…

Git常用命令整理

git init # 初始化本地git仓库&#xff08;创建新仓库&#xff09;git config --global user.name "xxx" # 配置用户名git config --global user.email "xxxxxx.com" # 配置邮件git config --global color.ui true # git status等命令自动着色git config -…

LeetCode—<分治专项>剑指 Offer 07、16、33

剑指 Offer 07. 重建二叉树、16. 数值的整数次方、33. 二叉搜索树的后序遍历序列 题目描述&#xff1a; [07] 输入某二叉树的前序遍历和中序遍历的结果&#xff0c;请构建该二叉树并返回其根节点。 假设输入的前序遍历和中序遍历的结果中都不含重复的数字。 [16] 实现 pow(x,…

唱歌的方法与技巧[收集]

Method 1我想很多人都有些嗓子限制,就认为自己不适合唱歌等...其实绝大多数人,都是可以唱的非常棒的,就算嗓子很不好,也可以通过自我的锻炼逐渐培养出来的.其实唱歌到达一定阶段,可以说,逐渐的少用嗓子.有些人唱歌时,用手压着嗓子,不让嗓子向上,其实是有原因的.但这并不是正确的…

练习(00008)

参考&#xff1a;第7章 JavaScript.doc/第7章 JavaScript.文件夹转载于:https://www.cnblogs.com/lesvies/archive/2011/09/19/2181495.html

《算法导论》——MergeSort

前言&#xff1a; 在今后的日子里&#xff0c;我将持续更新博客&#xff0c;讨论《算法导论》一书中的提到的各算法的C实现。初来乍到&#xff0c;请多指教。 今日主题&#xff1a;   今天讨论《算法导论》第二章算法基础中的归并排序算法。下面是该算法的代码Merge.h&#x…

MySQL 常用运算符

1.算数运算符 加 mysql> select 12; 减 mysql> select 2-1; 乘 mysql> select 2*3; 除 mysql> select 5/3; 商 mysql> SELECT 5 DIV 2; 模 mysql> select 5%2,mod(5,2); 2.比较运算符 等于 mysql> select 10,11,nullnull; 不等于 mysql> select 1<&…

react 路由v6

这里是区别&#xff1a;V5 vs V6 这里是官网&#xff1a;可以查看更多高级属性 基本使用&#xff1a; 1、配置文件 src/routes/index import React from "react";const Home React.lazy(() > import("../Pages/Home")); const About React.lazy(()…