学习笔记
平常学习的心得和体会
帅帅邬同学
星辰和大海都需要门票,诗和远方的路费也都很贵,就好像我稍不努力连情怀都养不起!
展开
-
13_只读属性和抽象类!!!
只读属性和抽象类只读属性测试及结果抽象类测试及结果只读属性在属性前面加上 readonly 关键字即可!!!class Person { public readonly name: string; constructor(name: string) { this.name = name; }}测试及结果测试代码:const person = new Person('Dell');person.name = 'hello';console.log(person.na原创 2021-05-08 18:53:12 · 330 阅读 · 0 评论 -
12_静态属性、Setter和Getter以及单例模式的实现!!!
静态属性、Setter和Getter以及单例模式的实现Setter和Getter测试及结果类中的静态属性单例模式的实现测试及结果Setter和Getterclass Person { constructor(private _name: string) {} get name() { return this._name + " lee"; } set name(name: string) { const realName = name.split(" ")[0];原创 2021-05-08 18:23:07 · 473 阅读 · 0 评论 -
11_类中的访问类型和构造器!!!
类中的访问类型和构造器类中的访问类型小结类中的构造器调用父类的构造器测试及结果类中的访问类型private, protected, public 三种访问类型class Person { protected name: string; public sayHi() { this.name = "ws"; console.log(this.name); console.log("hi"); } private sayABC() { this.name;原创 2021-05-08 17:29:59 · 230 阅读 · 0 评论 -
10_类的定义与继承!!!
类的定义与继承类的定义类的继承测试及结果类的定义class Person { name = "dell"; getName() { return this.name; }}类的继承class Teacher extends Person { getTeacherName() { return "Teacher"; } getName() { // console.dir(super.getName); return super.getNam原创 2021-05-06 20:37:16 · 215 阅读 · 0 评论 -
09_Interface 接口!!!
TypeScript中的 Interface 接口interface 和 type接口的继承测试及结果类实现接口接口类型的显式声明(了解)interface 和 typeinterface 和 type 相类似,但并不完全一致,优先使用接口interface Person { // readonly name: string; // 表示name属性是只读的 name: string; age?: number; // age可有可无 [propName: string]: any;原创 2021-05-06 20:24:04 · 101 阅读 · 0 评论 -
08_数组和元组!!!
数组和元组数组type alias 类型别名元组 tuple元组的嵌套数组const arr: (number | string)[] = [1, "2", 3];const stringArr: string[] = ["a", "b", "c"];const undefinedArr: undefined[] = [undefined];type alias 类型别名// 使用 type 关键字,定义一个 User 类型type User = { name: string; age: n原创 2021-05-06 20:02:44 · 187 阅读 · 0 评论 -
07_基础语法复习!!!
TypeScript基础语法复习基础类型对象类型其它的 case基础类型基础类型: boolean, number, string, void, undfined, symbol, nulllet count: number;count = 123;对象类型对象类型:{ }, Class, function, [ ]const func = (str: string) => { return parseInt(str, 10);};const func1: (str: str原创 2021-05-06 19:37:35 · 77 阅读 · 0 评论 -
06_函数相关类型!!!
函数相关类型类型一类型二类型三类型四类型五测试及结果类型一参数是基本类型,类型写法如下:function add(first: number, second: number): number { return first + second;}类型二返回值是基本类型 void,类型写法如下:function sayHello(): void { console.log("hello");}类型三返回值是基本类型 never,表示这个函数永远不会执行完,类型写法如下:funct原创 2021-05-06 19:22:21 · 78 阅读 · 0 评论 -
05_类型注解和类型推断!!!
类型注解和类型推断如果 TS 能够自动分析变量类型,我们就什么也不需要做了如果 TS 无法分析变量类型的话,我们就需要使用类型注解类型注解type annotation: 类型注解, 我们来告诉 TS 变量是什么类型function getTotal(firstNumber: number, secondNumber: number) { return firstNumber + secondNumber;}const total = getTotal(1, 2);类型推断typ原创 2021-05-06 18:58:54 · 82 阅读 · 0 评论 -
04_基础类型和对象类型!!!
数据类型基础类型基础类型: null, undefined, symbol, boolean, voidconst count: number = 123;const teacherName: string = "Dell";对象类型class Person {}const teacher: { name: string; age: number;} = { name: "Dell", age: 18,};const numbers: number[] = [1,原创 2021-05-06 18:50:25 · 85 阅读 · 0 评论 -
03_TypeScript基础环境搭建!!!
安装TypeScriptnpm i typescript -g使用源代码:interface Point { x: number; y: number;}function tsDemo(data: Point) { return Math.sqrt(data.x ** 2 + data.y ** 2);}console.log(tsDemo({ x: 1, y: 123 }));生成编译后的JavaScript文件tsc 文件名.tsfunction tsD原创 2021-05-06 17:02:44 · 72 阅读 · 0 评论 -
02_TypeScript带来了什么优势!!!
对比:需求:求两数平方和的开方版本一:普通JavaScriptfunction tsDemo(data) { return Math.sqrt(data.x ** 2 + data.y ** 2);}console.log(tsDemo({ x: 1, y: 123 }));版本二:TypeScriptinterface Point { x: number; y: number;}function tsDemo(data: Point) { return Math.原创 2021-05-06 16:51:19 · 180 阅读 · 0 评论 -
01_TypeScript的定义!!!
静态类型let b: number = 123;b = 456;解释声明一个变量b,类型为 number,数字类型,则如果对b进行赋值的话,只能赋值为数字类型。否则就会报错!!!例如:b = ‘456’;报错信息如下:当然啦,大家如果有补充的或者其它问题,欢迎大家在评论区交流啊,路漫漫其修远兮,吾将上下而求索,希望大家可以一起坚持下去啊!????????????~~~如果这篇文章能够帮助到您,希望您不要吝惜点赞????????和收藏????????,您的支持是我继续创作的动力 ???原创 2021-05-06 16:33:14 · 79 阅读 · 0 评论 -
JavaScript实现 - LeetCode刷题 -【寻找数组的中心索引】- 第 724 题 !!!
题目:LeetCode题目链接题目截图:解题步骤:1.求出数组中所有元素之和2.遍历整个数组,如果 sum 减去当前元素和当前元素的左半部分之和 left, 结果等于左半部分之和,返回当前元素的下标,否则返回 -1代码:/** * @param {number[]} nums * @return {number} */var pivotIndex = function (nums) { let sum = 0; let left = 0; nums.forEach(原创 2021-01-29 12:44:21 · 153 阅读 · 4 评论 -
JavaScript实现 - LeetCode刷题 -【子集】- 第 78 题 !!!
题目:LeetCode题目链接题目截图:解题步骤:使用回溯算法,和全排列问题类似要求:1.所有子集 2.没有重复元素和重复子集;有出路、有死路;考虑使用回溯算法1.用递归模拟出所有情况2.保证接的数字都是后面的数字,是有顺序的(1后面可以跟2、3,但是3后面不可以跟1、2)3.收集所有到达递归终点的情况,并返回代码:/** * @param {number[]} nums * @return {number[][]} */var subsets = function (num原创 2021-01-29 11:27:10 · 224 阅读 · 4 评论 -
JavaScript实现 - LeetCode刷题 -【全排列】- 第 46 题 !!!
题目:LeetCode题目链接题目截图:解题步骤:使用回溯算法1.用递归模拟出所有情况2.遇到包含重复元素的情况,就回溯3.收集所有到达递归终点的情况,并返回代码:/** * @param {number[]} nums * @return {number[][]} */var permute = function(nums) { const res = []; const backtrack = path => { if (path.length ===原创 2021-01-28 22:06:19 · 202 阅读 · 2 评论 -
JavaScript实现 - LeetCode刷题 -【买卖股票的最佳时机 II】- 第 122 题 !!!
题目:LeetCode题目链接题目截图:解题步骤:使用贪心算法,只顾眼前,先追求局部最优解,然后发现它也是全局最优解,符合题意前提:上帝视角,知道未来的价格局部最优:见好就收,见差就不动,不作任何长远打算,并且这个利润还不是净利润(不减本钱),并且还不需要考虑能不能买得起这个问题,只是计算付出和挣取之间的差价而已1.新建一个变量,用来统计总利润2.遍历价格数组,如果当前价格比昨天高(所以i从1开始),就在昨天买,今天卖,否则就不交易3.遍历结束后,返回所有利润之和代码:/**原创 2021-01-26 22:00:41 · 293 阅读 · 2 评论 -
JavaScript实现 - LeetCode刷题 -【分发饼干】- 第 455 题 !!!
题目:LeetCode题目链接题目截图:解题步骤:用到了贪心算法局部最优:既能满足孩子,还消耗最少,这样就有可能满足更多的孩子1.对饼干数组和胃口数组升序排序2.遍历饼干数组,找到能满足第一个孩子的饼干3.然后继续遍历饼干数组,找到满足第二、三、...n个孩子的饼干,此时n就是能满足的孩子的最大值代码:/** * @param {number[]} g * @param {number[]} s * @return {number} */var findContentChi原创 2021-01-25 22:03:27 · 232 阅读 · 7 评论 -
JavaScript实现 - LeetCode刷题 -【打家劫舍】- 第 198 题 !!!
题目:LeetCode题目链接题目截图:解题步骤:符合动态规划的思想1.定义子问题:f(k) = max(f(k-2) + Ak, f(k-1)) f(k):从前k个房屋中能偷窃到的最大数额 Ak:第k个房屋的钱数,不是A乘k,A只是一个符号2.反复执行:从2循环到n,执行上述公式代码:/** * @param {number[]} nums * @return {number} */var rob = function (nums) { // 第一种方式 //原创 2021-01-25 21:43:16 · 196 阅读 · 4 评论 -
JavaScript实现 - LeetCode刷题 -【爬楼梯】- 第 70 题 !!!
题目:LeetCode题目链接题目截图:解题步骤:符合动态规划的思想1.定义子问题:爬到第n阶可以在第n-1阶爬一个台阶,或者在第n-2阶 爬两个台阶,由于是或,所以是+,F(n)表示爬到第n阶,所有的方法数 F(n) = F(n - 1) + F(n - 2)2.反复执行:从2循环到n,执行上述公式,因为n为1的话,只有一种方式代码:/** * @param {number} n * @return {number} */var climbStairs = functi原创 2021-01-23 21:40:13 · 2005 阅读 · 10 评论 -
JavaScript实现 - LeetCode刷题 -【对称二叉树】- 第 101 题 !!!
题目:LeetCode题目链接题目截图:解题步骤:符合分而治之的特点1.分:获取两个树的左子树和右子树2.解:递归地判断树1的左子树和树2的右子树是否镜像,树1的右子树和树2的左子树是否镜像3.合:如果上述都成立,且根节点值也相同,两个树就镜像代码:/** * Definition for a binary tree node. * function TreeNode(val) { * this.val = val; * this.left = this.rig原创 2021-01-23 21:08:44 · 109 阅读 · 2 评论 -
JavaScript实现 - LeetCode刷题 -【相同的树】- 第 100 题 !!!
题目:LeetCode题目链接题目截图:解题步骤:符合分而治之的特点1.分:获取两个数的左子树和右子树2.解:递归地判断两个树的左子树是否相同,右子树是否相同3.合:将上述结果合并,如果根节点的值也相同,则树就相同代码:/** * Definition for a binary tree node. * function TreeNode(val, left, right) { * this.val = (val===undefined ? 0 : val) *原创 2021-01-21 22:33:51 · 114 阅读 · 0 评论 -
JavaScript实现 - LeetCode刷题 -【翻转二叉树】- 第 226 题 !!!
题目:LeetCode题目链接题目截图:解题步骤:符合分而治之的特点1.分:获取左右子树2.解:递归地翻转(旋转180度)左右子树3.合:将翻转后的左右子树换个位置放到根节点上代码:/** * Definition for a binary tree node. * function TreeNode(val) { * this.val = val; * this.left = this.right = null; * } *//** * @param原创 2021-01-21 22:17:30 · 218 阅读 · 4 评论 -
JavaScript实现 - LeetCode刷题 -【猜数字大小】- 第 374 题 !!!
题目:LeetCode题目链接题目截图:解题步骤:用到了二分搜索1.从数组的中间元素开始,如果中间元素正好是目标值,则搜索过程结束2.如果目标值大于或者小于中间元素,则在数组大于或小于中间元素的那一半查找代码:/** * Forward declaration of guess API. * @param {number} num your guess * @return -1 if num is lower than the guess numbe原创 2021-01-21 22:00:24 · 281 阅读 · 7 评论 -
JavaScript实现 - LeetCode刷题 -【合并两个有序链表】- 第 21 题 !!!
题目:LeetCode题目链接题目截图:解题步骤:跟归并排序合并两个有序数组类似1.新建一个新链表,作为返回结果2.用指针遍历两个有序链表,并比较两个链表的当前节点, 较小者先接入新链表,并将指针后移一步3.链表遍历结束,返回新链表代码:/** * Definition for singly-linked list. * function ListNode(val, next) { * this.val = (val===undefined ? 0 : val) *原创 2021-01-18 21:53:28 · 239 阅读 · 3 评论 -
JavaScript实现 - LeetCode刷题 -【合并K个升序链表】- 第 23 题 !!!
题目:LeetCode题目链接题目截图:解题步骤:1.构建一个最小堆,并依次把链表头插入堆中,但需要对最小堆有所改动2.弹出最小的堆顶接到输出链表,并将之前弹出的堆顶所在链表的新链表头,插入堆中3.重复第二步,等堆元素全部弹出,合并工作就完成了代码:// 最小堆class MinHeap { constructor() { this.heap = []; } // 交换 swap(i1, i2) { const temp = this.heap[i1];原创 2021-01-17 21:26:01 · 215 阅读 · 6 评论 -
举例说明子串和子序列的区别 !!!
定义:子串:必须连续子序列:可以不连续举个栗子给定字符串 "asdfghj"子串是asd,asdf等很多个子串, 是连在一起的。子序列是 asf,adf等很多个子序列 ,子序列中的字符在字符串中不一定是连在一起的。怎么样,是不是很简单,你学会了吗 ?如果这篇文章能够帮助到您,希望您不要吝惜点赞 ???????? 和收藏 ????????,您的支持是我继续努力的动力 ????????!!!...原创 2021-01-16 21:10:38 · 6039 阅读 · 2 评论 -
JavaScript 中遇到 “null instanceof Object ” 的返回值为什么是 false 呢 ???
起因:一探究竟:1. 这是一个历史遗留问题,对于Null类型的值(只有null),typeof null是出了一个bug, 就是返回"Object"这个字符串。 2. Null 和 Object 不是一个数据类型,null 值并不是以 Object 为原型创建出来的。 所以null instanceof Object是false。但 null 确实是javascript中 用来表示空引用的一个特殊值。使得它不是instanceof Ojbect, 而typeof nul原创 2021-01-16 21:00:26 · 1129 阅读 · 0 评论 -
JavaScript实现 - LeetCode刷题 -【前 K 个高频元素】- 第 347 题 !!!
题目:LeetCode题目链接题目截图:解题步骤:1.构建一个最小堆,并依次把数组的值插入堆中2.当堆的容量超过K,就删除堆顶3.插入结束后,堆顶就是第K个最大元素,就比如只剩下三个元素了,则堆顶就是第三个最大元素代码:// 最小堆class MinHeap { constructor() { this.heap = []; } // 交换 swap(i1, i2) { const temp = this.heap[i1]; this.heap[原创 2021-01-16 20:20:48 · 196 阅读 · 0 评论 -
JavaScript实现 - LeetCode刷题 -【数组中的第K个最大元素】- 第 215 题 !!!
题目:LeetCode题目链接题目截图:解题步骤:1.构建一个最小堆,并依次把数组的值插入堆中2.当堆的容量超过K,就删除堆顶3.插入结束后,堆顶就是第K个最大元素,就比如只剩下三个元素了,则堆顶就是第三个最大元素代码:// 最小堆class MinHeap { constructor() { this.heap = []; } // 交换 swap(i1, i2) { const temp = this.heap[i1]; this.heap[原创 2021-01-16 19:33:52 · 140 阅读 · 0 评论 -
JavaScript实现 - LeetCode刷题 -【克隆图】- 第 133 题 !!!
题目:LeetCode题目链接题目截图:解题步骤:1.深度或广度优先遍历所有节点 2.拷贝所有的节点,存储起来3.将拷贝的节点,按照原图的连接方法进行连接代码:/** * // Definition for a Node. * function Node(val, neighbors) { * this.val = val === undefined ? 0 : val; * this.neighbors = neighbors === und原创 2021-01-14 21:05:57 · 142 阅读 · 2 评论 -
JavaScript实现 - LeetCode刷题 -【太平洋大西洋水流问题】- 第 417 题 !!!
题目:LeetCode题目链接题目截图:解题步骤:1.新建两个矩阵,分别记录能流到两个大洋的坐标2.从海岸线,多管齐下,同时深度优先遍历图,过程中填充上述矩阵3.遍历上面两个矩阵,找出同时能流到两个大洋的坐标代码:/** * @param {number[][]} matrix * @return {number[][]} */var pacificAtlantic = function (matrix) { if (!matrix || !matrix[0]) return原创 2021-01-13 22:22:30 · 179 阅读 · 0 评论 -
JavaScript实现 - LeetCode刷题 -【有效数字】- 第 65 题 !!!
题目:LeetCode题目链接题目截图:解题步骤:1.构建一个表示状态的图,0-7一共表示8种状态,3/5/6是合法状态2.遍历字符串,并沿着图走,如果到了某个节点无路可走就返回false3.遍历结束,如走到3/5/6,就返回true,否则返回false代码:/** * @param {string} s * @return {boolean} */var isNumber = function (s) { const graph = { 0: { 'blank':原创 2021-01-12 22:17:03 · 115 阅读 · 4 评论 -
JavaScript实现 - LeetCode刷题 -【路径总和】- 第 112 题 !!!
题目:LeetCode题目链接题目截图:解题步骤:1.深度优先遍历二叉树,在叶子节点处,判断当前路径的节点值的和是否等于目标值,是就返回true2.遍历结束,如果没有匹配,就返回false代码:/** * Definition for a binary tree node. * function TreeNode(val) { * this.val = val; * this.left = this.right = null; * } *//** * @pa原创 2021-01-11 22:06:22 · 177 阅读 · 0 评论 -
JavaScript实现 - LeetCode刷题 -【二叉树的中序遍历】- 第 94 题 !!!
题目:LeetCode题目链接题目截图:解题步骤:1.对根节点的左子树进行中序遍历2.访问根节点3.对根节点的右子树进行中序遍历代码:/** * Definition for a binary tree node. * function TreeNode(val, left, right) { * this.val = (val===undefined ? 0 : val) * this.left = (left===undefined ? null : left原创 2021-01-10 22:25:05 · 87 阅读 · 0 评论 -
JavaScript实现 - LeetCode刷题 -【二叉树的层序遍历】- 第 102 题 !!!
题目:LeetCode题目链接题目截图:解题步骤:1.广度优先遍历二叉树2.遍历过程中,记录每个节点的层级,并将其添加到不同的数组中代码:/** * Definition for a binary tree node. * function TreeNode(val) { * this.val = val; * this.left = this.right = null; * } *//** * @param {TreeNode} root * @retu原创 2021-01-09 17:55:19 · 207 阅读 · 0 评论 -
JavaScript实现 - LeetCode刷题 -【二叉树的最小深度】- 第 111 题 !!!
题目:LeetCode题目链接题目截图:解题步骤:1.广度优先遍历整棵树,并记录每个节点的层级2.遇到叶子节点,返回节点层级,并停止遍历代码:/** * Definition for a binary tree node. * function TreeNode(val, left, right) { * this.val = (val===undefined ? 0 : val) * this.left = (left===undefined ? null : l原创 2021-01-08 22:29:42 · 181 阅读 · 3 评论 -
JavaScript实现 - LeetCode刷题 -【二叉树的最大深度】- 第 104 题 !!!
题目:LeetCode题目链接题目截图:解题步骤:1.新建一个变量,记录最大深度2.深度优先遍历整棵树,并记录每个节点的层级,同时不断刷新最大深度这个变量3.遍历结束返回最大深度这个变量代码:/** * Definition for a binary tree node. * function TreeNode(val) { * this.val = val; * this.left = this.right = null; * } *//** * @pa原创 2021-01-07 09:36:58 · 156 阅读 · 4 评论 -
JavaScript实现 - LeetCode刷题 -【最小覆盖子串】- 第 76 题 !!!
题目:LeetCode题目链接题目截图:解题步骤:1.用双指针维护一个滑动窗口2.移动右指针,找到包含t的子串,移动左指针,尽量减少包含t的子串的长度3.循环上述过程,找出包含t的最小子串代码:/** * @param {string} s * @param {string} t * @return {string} */var minWindow = function (s, t) { let l = r = 0; const need = new Map();原创 2021-01-06 08:04:57 · 148 阅读 · 0 评论 -
JavaScript实现-LeetCode刷题-【无重复字符的最长子串】-第3题 !!!
题目:LeetCode题目链接题目截图:解题步骤:1.用双指针维护一个滑动窗口,用来剪切子串2.不断移动右指针,遇到重复字符,就把左指针移动到重复字符的下一位 3.过程中,记录所有窗口的长度,并返回最大值代码:/** * @param {string} s * @return {number} */var lengthOfLongestSubstring = function (s) { let l = 0; // 左原创 2021-01-05 09:04:00 · 293 阅读 · 2 评论