leecode
文章平均质量分 51
分享自己在力扣刷题的思路和解法
程序不了猿
一个还在成长的程序员,分享自己学到的点滴经验。
展开
-
【leecode 剑指offer】 1~n整数中1出现的次数
题目输入一个整数 n ,求1~n这n个整数的十进制表示中1出现的次数。例如,输入12,1~12这些整数中包含1 的数字有1、10、11和12,1一共出现了5次。示例示例1输入:n = 12输出:5示例2输入:n = 13输出:6解题思路将 11 ~ nn 的个位、十位、百位、…的 11 出现次数相加,即为 11 出现的总次数。这边可以使用排列组合的方法解决,统计所有1出现的次数,我们可以吧所有整数理解为行李箱上的密码锁,先固定某一位上的数据控制为1,然后归纳所有数字的原创 2021-06-05 16:30:09 · 435 阅读 · 0 评论 -
【leecode 剑指offer】连接连续二进制数字
连接连续二进制数字给你一个整数 n ,请你将 1 到 n 的二进制表示连接起来,并返回连接结果对应的 十进制 数字对 109 + 7 取余的结果。解题思路对于第n个数和前n-1个数连接之后的数值sum,将n转成二进制字符串,假定长度为k,sum需要整体左移k个长度,就是乘以Math.pow(2,k),所以一次遍历就完成了,注意每次取余即可。代码展示/** * @param {number} n * @return {number} */var concatenatedBinary = f原创 2021-03-25 10:12:02 · 198 阅读 · 0 评论 -
【leecode 剑指offer】复杂链表的深拷贝
复杂链表的深拷贝请实现 copyRandomList 函数,复制一个复杂链表。在复杂链表中,每个节点除了有一个 next 指针指向下一个节点,还有一个 random 指针指向链表中的任意节点或者 null。解析用一个哈希表表示映射关系:键是原节点,值是复制的节点。整体算法流程是:第一次遍历,复制每个节点和 next 指针,并且保存“原节点-复制节点”的映射关系第二次遍历,通过哈希表获得节点对应的复制节点,更新 random 指针代码实现/** * // Definition for原创 2021-03-18 10:41:55 · 124 阅读 · 0 评论 -
【leecode 剑指offer】二叉树中和为某一值的路径
题目二叉树中和为某一值的路径描述输入一棵二叉树和一个整数,打印出二叉树中节点值的和为输入整数的所有路径。从树的根节点开始往下一直到叶节点所经过的节点形成一条路径。思路本问题是典型的二叉树方案搜索问题,使用回溯法解决,其包含 先序遍历 + 路径记录 两部分先序遍历: 按照 “根、左、右” 的顺序,遍历树的所有节点。路径记录: 在先序遍历中,记录从根节点到当前节点的路径。当路径为 ① 根节点到叶节点形成的路径 且 ② 各节点值的和等于目标值 sum时,将此路径加入结果列表。算法流程:原创 2021-02-25 16:57:34 · 168 阅读 · 2 评论 -
【leecode 剑指offer】二叉搜索树的后序遍历序列
二叉搜索树的后序遍历序列题目输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历结果。如果是则返回 true,否则返回 false。假设输入的数组的任意两个数字都互不相同。参考以下这颗二叉搜索树:解题思路后续遍历是左右根。因此postorder的顺序是左子树+右子树+根。二叉搜索树的性质是,左子树都比根节点小,右子树都比根节点大。并且每个节点(除叶子节点)都符合这个情况。因此检查左子树是否都小于根节点,右子树是否都大于根节点。并递归检查每个子树。都符合返回true算法展示/**原创 2020-12-26 14:35:01 · 118 阅读 · 0 评论 -
【leecode 剑指 Offer】从上到下打印二叉树 III
从上到下打印二叉树 III题目请实现一个函数按照之字形顺序打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右到左的顺序打印,第三行再按照从左到右的顺序打印,其他行以此类推。示例例如:给定二叉树: [3,9,20,null,null,15,7],返回其层次遍历结果:解题思路算法流程:BFS 循环: 循环打印奇 / 偶数层,当 queue 为空时跳出;打印奇数层: 从左向右 打印,先左后右 加入下层节点;若 queue 为空,说明向下无偶数层,则跳出;打印偶数层: 从右向左原创 2020-12-23 14:28:04 · 97 阅读 · 0 评论 -
【leecode 剑指offer】 从上到下打印二叉树 II
从上到下打印二叉树 II一、题目从上到下按层打印二叉树,同一层的节点按从左到右的顺序打印,每一层打印到一行。二、示例例如:给定二叉树: [3,9,20,null,null,15,7],返回其层次遍历结果:提示:节点总数 <= 1000三、思路I. 按层打印: 题目要求的二叉树的 从上至下 打印(即按层打印),又称为二叉树的 广度优先搜索(BFS)。BFS 通常借助 队列 的先入先出特性来实现。II. 每层打印到一行: 将本层全部节点打印到一行,并将下一层全部节点加入队列,以此原创 2020-12-19 18:27:56 · 113 阅读 · 1 评论 -
【leecode 剑指offer】从上到下打印二叉树
从上到下打印二叉树题目从上到下打印出二叉树的每个节点,同一层的节点按照从左到右的顺序打印。示例例如:给定二叉树: [3,9,20,null,null,15,7]返回[3,9,20,15,7]思路BFS层序遍历需要使用一个队列来存储有用的节点。整体的思路如下:子节点顺序:自左向右将 root 放入队首取出队首元素,将 val 放入返回的数组中检查队首元素的子节点,若不为空,则将子节点放入队列检查队列是否为空,为空,结束并返回数组;不为空,回到第二步代码实现/**原创 2020-12-13 15:56:52 · 78 阅读 · 0 评论 -
【leecode 剑指offer】 判断栈的压入、弹出序列是否对应
判断栈的压入、弹出序列是否对应题目输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如,序列 {1,2,3,4,5} 是某栈的压栈序列,序列 {4,5,3,2,1} 是该压栈序列对应的一个弹出序列,但 {4,3,5,1,2} 就不可能是该压栈序列的弹出序列。示例1输入:pushed = [1,2,3,4,5], popped = [4,5,3,2,1]输出:true解释:我们可以按以下顺序执行:push(1), push(2)原创 2020-12-11 16:19:59 · 105 阅读 · 1 评论 -
【leecode 剑指offer】 顺时针打印矩阵
[leecode 剑指offer] 顺时针打印矩阵题目输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。示例输入:matrix = [[1,2,3],[4,5,6],[7,8,9]]输出:[1,2,3,6,9,8,7,4,5]输入:matrix = [[1,2,3,4],[5,6,7,8],[9,10,11,12]]输出:[1,2,3,4,8,12,11,10,9,5,6,7]思路:按层模拟可以将矩阵看成若干层,首先打印最外层的元素,其次打印次外层的元素,直到打印最内原创 2020-12-08 08:13:31 · 115 阅读 · 2 评论 -
(Promise/async): “TypeError: Cannot read property ‘length‘ of undefined“
错误描述这个错误翻译过来是不能读取元素未定义的length属性。错误原因根据编译器报的错,回过去看自己的代码块:发现自己在使用递归函数时没有判断结点的children属性是否存在,由于存在叶子结点,叶子结点没有children属性。所以我对代码进行了修改:这样就解决了(Promise/async): "TypeError: Cannot read property ‘length’ of undefined"错误,并且递归调用能够达到其目的。...原创 2020-07-17 14:39:45 · 1310 阅读 · 1 评论