建议阅读时间:8 分钟
前言
本篇文章适用于具有前端基础且平时经常使用 javascript
或 typescript
做力扣的同学
正文
为了提高我们的思维逻辑,我们可能经常有空的时候去做上一两道算法题
对于前端同学来说,使用 js 去做算法题是一个很不错的选择,力扣作为一个不关心输入输出的函数式刷题平台也成了广大开发者的刷题首选
调试,寻找代码中的问题
当我们使用 js 在力扣上做题时,如果我们代码的结果和我们预期的结果不一致,我们就需要进行调试
调试有两种方式,在代码中加 log 和打断点单步执行,在一些情况下,我们通过代码中加 log 的方式就可以发现我们代码的问题
对于 log 难以发现的问题,我们就需要打断点进行单步调试了,一步步执行,并且实时的观察各个变量当前的值
对于 log 的调试方式,我们可以通过 node.js 在本地运行写好了 log 的 js 代码
例如:
对于断点调试,VSCode 也对 JS 提供了很好的调试支持(也是用的 node 环境)
例如:
力扣奇妙的输入
我们在本地调试,就需要将力扣上的输入数据复制到本地代码中,或者自己根据题意构造数据
而对于一些涉及到例如链表、树等数据结构的题目,力扣的输入输出样例直接复制过来是不行的
力扣平台的代码执行流程
以 力扣 617. 合并二叉树 为例
可能有写同学会有以为,这个代码模板里写的是给我传一个 TreeNode 类型的节点,但是输入数据却是一个数组???
实际上是这样的,如下图,力扣平台先读取我们的代码,读取测试用例的输入,然后通过一些算法将字符串输入转化成我们写的函数的入参,然后给我们传进来,对于这道题这个算法就是通过数组创建一颗二叉树并返回树的根节点
这种行为就导致我们本地难以调试这类题目,因为我们本地没有这个“输入转化算法”
我们观察力扣中多种题目,发现像二叉树,链表这类题目,它的输入转化算法都是通用的
二叉树类型的题目基本都是通过数组生成二叉树
那么对于这类题目,我们是不是主要自己本地写一遍这个转化算法,之后做同类型的题目就都可以直接使用了
前端本地调试工具包
对于这类问题,在这里给大家推荐一个用于本地调试的工具包
里面提供了这些通用的“输入转化算法”以及一些其它的辅助工具函数
它的使用非常简单
只需要在本地的项目中安装这个 npm 包然后直接使用即可
npm install @ycx60rzvvbj1523/leetcode-debug-utils
如上图所示,通过使用工具包中
createBinaryTree
函数把数组转化成了树,使用工具包中 printTree
函数将树“画了”出来,用于方便我们调试中 log
除此之外,工具包中还提供了很多其它类型题目的“输入转化算法”以及一些辅助工具
详情可以查看工具包官方的使用手册:leetcode-debug-utils 使用手册
结语
若文章中存在错误、缺漏、不足或讲的不清晰的地方,可以帮忙指出,提供一些意见或建议,帮助作者在掘金中一起构建更好的生态环境
希望这篇文章对你能够有所帮助,感谢你的喜欢