Skip to content

myangvgo/leetcode-with-js

Repository files navigation

leetcode-with-js

Solving LeetCode problems using JavaScript。

题目涵盖了 LeetCode、「程序员的面试金典」(Cracking the Coding Interview)[第六版] 以及「剑指 offer」。

I. 项目说明

项目结构

1. src

src 文件夹下按照题目分类存放解题文件,每道题对应一个文件。 文件的命名按照 [题号]-[题目的英文名].js 格式,英文单词用 - 连接。

2. test

test 目录下存放按照题目分类存解题测试文件,每道题对应一个测试文件 文件的命名按照 [题号]-[题目的英文名].test.js 格式,英文单词用 - 连接。

3. doc

doc 目录下主要存放解题笔记以及优秀的题解总结。

  • doc/solutions 目录下存放按照题目分类的解题笔记文件,每道题对应一个笔记文件
  • 文件的命名按照 [题号]-[题目的英文名].md 格式,英文单词用 - 连接。

运行题目的测试案例

Run all tests

npm test test/**/*.js

Run all tests in a file (or multiple files matched)

npm test test/path/to/file.js

Run all test cases matched in multiple files

npm test -- --grep test-regex-string

工具篇

对于每道题目都需要创建三个文件:源文件,测试文件,笔记文件,可以借助于自定义的 add 命令快速创建。

1. 链接 add 命令

首先运行如下命令,将当前项目 bin 目录下的命令关联到本地 node_modules 下面

npm link

2. 创建文件

# -f filename (required) -c category (required) -t chineseDesc (optional)
add -f numberOfProblem-name-of-leetcode-problem -c categoryName -t chineseDescription

# 例如(提供中文题目名称)- 供题解 Markdown 文件使用
add -f 102-binary-tree-level-order-traversal -c binary-tree -t 二叉树的层次遍历
# 不提供中文题目名称
add -f 102-binary-tree-level-order-traversal -c binary-tree

3. 如果需要移除当前目录的命令连接

npm unlink

移除之后,可以通过运行如下命令,跟运行步骤2中的 add 命令等价。

node bin/add.js -f numberOfProblem-name-of-leetcode-problem -c categoryName -t chineseDesc

II. LeetCode 分类题解

数组 (array)

题号 题目链接 难度 题解链接 刷题思路
1 两数之和 简单 题解
11 盛水最多的容器 中等 题解
15 三数之和 中等 题解
26 删除排序数组中的重复项 简单 题解
27 移除元素 简单 题解
66 加一 简单 题解
70 爬楼梯 简单 题解
80 删除排序数组中的重复项 II 中等 题解
88 合并两个有序数组 简单 题解
189 旋转数组 简单 题解
283 移动零 简单 题解
724 寻找数组的中心索引 简单 题解
747 至少是其他数字两倍的最大数 简单 题解
999 车的可用捕获量 简单 题解 使用方向向量简化移动

链表 (linked list)

题号 题目链接 难度 题解链接 刷题思路
146 LRU缓存机制 中等 题解
876 链表的中间结点 简单 题解 1. 一次遍历;2. 使用快慢指针遍历

栈 (stack)

题号 题目链接 难度 题解链接 刷题思路
20 有效的括号 简单 题解
155 最小栈 简单 题解
1111 有效括号的嵌套深度 中等 题解 使用栈判断最大深度;奇偶性判断

哈希表 (hashtable)

题号 题目链接 难度 题解链接 刷题思路

字典树 (trie)

题号 题目链接 难度 题解链接 刷题思路
820 单词的压缩编码 中等 题解 (1)字典树(Trie)后缀树 + 排序(2)Set 去重

递归 (recursion)

题号 题目链接 难度 题解链接 刷题思路

二叉树 (binary tree)

题号 题目链接 难度 题解链接 刷题思路

二分搜索 (binary search)

题号 题目链接 难度 题解链接 刷题思路

深度优先搜索和广度优先搜索 (DFS & BFS)

题号 题目链接 难度 题解链接 刷题思路

贪心算法 (greedy)

题号 题目链接 难度 题解链接 刷题思路

动态规划 (dynamic programming)

题号 题目链接 难度 题解链接 刷题思路
32 最长有效括号 困难 题解

排序算法 (sort)

题号 题目链接 难度 题解链接 刷题思路

位操作 (bit manipulation)

题号 题目链接 难度 题解链接 刷题思路

数学 (math)

题号 题目链接 难度 题解链接 刷题思路
892 三维形体的表面积 简单 题解 画图找规律
914 卡牌分组 简单 题解 哈希表分组,辗转相除求最大公约数

III. 剑指 Offer 题解

题号 题目链接 难度 题解链接 分类 刷题思路

IV. 程序员面试金典题解

题号 题目链接 难度 题解链接 分类 刷题思路
10.01 合并排序的数组 简单 题解 数组、双指针
17.16 按摩师 简单 题解 动态规划 类似于 198. 打家劫舍 问题

About

Solving LeetCode problems using JavaScript

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published