Loading

摘要: 题目 剑指 Offer 47. 礼物的最大价值 思路1 因为是要求最大价值,而且只能移动下方或者右方,因此,每个位置的最大值就是本身的值加上上边 / 左边 中的最大值,然后每次遍历都可以复用上一次的值。因此我们可以得到状态转移方程: \(dp[i][j]=\begin{matrix} max(dp[ 阅读全文
posted @ 2021-12-03 02:32 linzeliang 阅读(21) 评论(0) 推荐(0) 编辑
摘要: 题目 剑指 Offer 46. 把数字翻译成字符串 思路1(递归,自顶向下) 这题和青蛙跳台阶很类似,青蛙跳台阶说的是青蛙每次可以跳一层或者两层,跳到第 n 层有多少种解法,而这题说的是讲数字翻译成字符串,每次可以翻译一个或者两个,但是翻译两个的时候还要判断是否为有效的,像 01、02 这种的数字就 阅读全文
posted @ 2021-12-02 20:16 linzeliang 阅读(26) 评论(0) 推荐(0) 编辑
摘要: 题目 剑指 Offer 42. 连续子数组的最大和 思路1(分析数组的规律) 我们可以从头到尾逐个累加,若之前的累加和小于0,那就从丢弃之前的累加,从当前开始重新累加,同时在遍历过程中比较记录下最大值 curSum记为当前最大值,为 0,以 [-2,1,-3,4,-1,2,1,-5,4] 为例: 首 阅读全文
posted @ 2021-11-27 18:20 linzeliang 阅读(18) 评论(0) 推荐(0) 编辑
摘要: 题目 剑指 Offer 10- II. 青蛙跳台阶问题 思路1(递归 / 自顶向下) 这题就是和上一题剑指 Offer 10- I. 斐波那契数列基本一模一样,都是 fib(n) = fib(n-1) + fib(n-2) 这个递推公式,只是初始条件不一样啦:上一题是 0、1、1、2...,而本题是 阅读全文
posted @ 2021-11-27 13:28 linzeliang 阅读(3) 评论(0) 推荐(0) 编辑
摘要: 题目 剑指 Offer 10- I. 斐波那契数列 思路1(递归 / 自顶向下) 这题是很常见的一道入门递归题,可以采用自顶向下的递归方法,比如我们要求第n个位置的值,根据斐波那契数列的定义fib(n) = fib(n-1) + fib(n-2),即等于前一个和前前一个两个的值之和 但是如果直接递归 阅读全文
posted @ 2021-11-27 12:13 linzeliang 阅读(17) 评论(0) 推荐(0) 编辑
摘要: 题目 剑指 Offer 32 - III. 从上到下打印二叉树 III 思路1 这题又是上一题剑指 Offer 32 - II. 从上到下打印二叉树 II的升级版,要求我们每层的遍历:一层是从左往右,另一层从右往左,因此可以使用一个布尔值flag来记录每次的状态(每次遍历结束后将flag取反),如果 阅读全文
posted @ 2021-11-25 23:46 linzeliang 阅读(2) 评论(0) 推荐(0) 编辑
摘要: 题目 剑指 Offer 32 - II. 从上到下打印二叉树 II 思路1 和剑指 Offer 32 - I. 从上到下打印二叉树很类似,不过这一题多加了一个条件,就是是要按层来存储节点的 在每次循环的时候要先获取队列中存在多少个元素size,这代表当前层有多少个节点,然后我们再用一个内循环将这些节 阅读全文
posted @ 2021-11-25 23:22 linzeliang 阅读(1) 评论(0) 推荐(0) 编辑
摘要: 题目 剑指 Offer 32 - I. 从上到下打印二叉树 思路1 BFS广度优先搜索遍历二叉树,使用队列存储节点 算法执行流程如下: 如果root,不为空,先加入队列,否则直接结束(因为一个元素都没有了嘛) 从队列queue中取出队头元素,存入列表res中,然后如果他的左节 / 右节点点不为空,就 阅读全文
posted @ 2021-11-25 23:09 linzeliang 阅读(1) 评论(0) 推荐(0) 编辑
摘要: 题目 剑指 Offer 55 - II. 平衡二叉树 思路1(后序遍历+剪枝) 这题是上一题剑指 Offer 55 - I. 二叉树的深度的进阶,逻辑代码和那个一样,也是后续遍历,获取两个子节点较大的那个深度再加上当前一层返回给父节点,是自底向上的 也为要求是否为平很二叉树,要保证他的左子树和右子树 阅读全文
posted @ 2021-11-24 22:51 linzeliang 阅读(7) 评论(0) 推荐(0) 编辑
摘要: 题目 剑指 Offer 55 - I. 二叉树的深度 思路1(DFS) 后续遍历吧,先遍历到最深(递归到末尾返回0),然后从后面一步一步比较取大的值返回,每次返回层数都加1, 执行流程是怎样的:比如其中一个节点左子树为空,右子树有一个叶子节点,那么 0 > 1 ,肯定选 1 ,再加上当前一层 1 , 阅读全文
posted @ 2021-11-24 20:12 linzeliang 阅读(9) 评论(0) 推荐(1) 编辑