剑指-34 二叉搜索树中和为某一值的路径
思路二叉搜索树本身包含了元素的排序,左子树的元素 <= 根节点 <= 右子树因为是从根结点到叶子结点的路径之和与指定值k进行对比遍历二叉树,当遍历到叶子结点的时候,判断从根路径到叶子结点的路径和是否和k相等,如果相等则添加该路径路径使用动态数组来存放,每当回退节点的时候去掉最后一个元素值
每一个平凡的日常都是连续的奇迹
思路二叉搜索树本身包含了元素的排序,左子树的元素 <= 根节点 <= 右子树因为是从根结点到叶子结点的路径之和与指定值k进行对比遍历二叉树,当遍历到叶子结点的时候,判断从根路径到叶子结点的路径和是否和k相等,如果相等则添加该路径路径使用动态数组来存放,每当回退节点的时候去掉最后一个元素值
思路主要思路是遍历格子,然后确保格子之间是联通的。这里有个条件,就是需要格子的位置的数位之和要小于k,也就是只有在该位置是可达变量(即从0,0到该位置可联通)且数位之和小于k的时候才可以算做可通过的格子(存在两个条件)class Solution { public int movingCoun
思路找到字符串头节点字符,然后使用栈保存后续的每个节点每个节点的查找方向有三个(来的方向需要去除),依次递归便利这三个方向,查看是否能找到完整字符串class Solution { // 通过栈保存元素遍历顺序 Stack<Word> stack = new Stack();
思路1链A的每个节点都遍历一遍链B,时间复杂度最高思路2链A的每个节点都存入map,然后遍历链B,如果map中存在则代表找到相同节点/** * Definition for singly-linked list. * public class ListNode { * int val; *
思路滑动窗口,设置left边界和最大值max,通过map来查询每个字符的下标每当遍历到新的字符,分两步骤进行处理map获取字符下标,如果没有存,则代表是非重复字符串,添加map并更新max值max = Math.max(right - left + 1, max)如果map已存在,更新窗口left
题目地址思路把数据变成字符数组处理(这里也可以做取余操作处理)核心思路近似斐波那契数列,当前字符c下标设为k的组合情况,取决于之前k-1,k-2的字符组合情况。这里和一般的斐波那契的不同在于f(n-2)是否可以和f(n-1)组成10~25之间的数,如果可以那么f(n)=f(n-1)+f(n-2)否则
题目链接思路思路同剑指42题总结的那样,当前元素节点的值取决于之前的情况选择。这道题可以根据动归思路来做首先考虑当前节点的最大价值如何决定。根据分析,当前节点的元素最大值取决于两种情况。设当前元素在i,j位置, 即 grid[i][j],价值矩阵为valueMatrix[][],这里保存每个格子的最
题目地址先小结一下该类型的题目思考方向。该种类型题目都是当前情况的选择取决于之前的之前的情况(这种说法就很递归)。通常这个时候可以考虑一下之前的选择可能会有几种,属于是逆推思想。可以看下面的思路解析思路1使用滑动窗口的思想解决在遍历到元素k的时候,之前的窗口值 value 会存在两种情况(1)窗口值
思路第一动态规划...画格子,当到第n天时,n-1天的利润最大值,然后判断第n天是否会有利润提升,如果有的话就更新利润最大值因为觉得动态规划有点麻烦,更简单类似于滑动窗口的解法,最小利润为0,窗口内的股价最低值为min,右窗口不断遍历更新最大利润值以及窗口内股价最低值,这样遍历到最后就可以取得整个数
以前看这道题感觉都不会(没看过题解),现在遇到直接就会解了,看来写写题目还是有用的: )思路正向的想法是根据只有1个台阶/2个台阶/3个台阶来递推...但是这样会很麻烦逆向的思维是考虑如果现在已经是n阶台阶了,那么上一步只有两种可能,n-1阶或者n-2阶(因为青蛙只能跳1阶或者2阶),因此把这两种可