LeetCode editor开箱体验——在 IntelliJ IDE中刷 Leetcode 题目

7/7/2020 LeetCodeLeetCode editorIntelliJ IDE

最近开始在刷 LeetCode 上的题目,在经过一段时间的的网页端上写代码打卡挑战,但是网页端的写代码体验原始得让习惯了强大 IDE 智能补充的我无比痛苦 😖。本着改善工具使用体验,提高个人学习效率(装逼 😎 是第一生产力)的原则,我开始搜索有没有办法能让我在我自己比较习惯的 IntelliJ IDE 中刷 Leetcode 上的题目。于是我找到了让我脱离苦海的神奇——LeetCode editor

# 简介

LeetCode editor (opens new window)是一款非常优秀的开源插件 👍🏻👍🏻,它支持获取 Leetcode 国际版 (opens new window)🌎 和中国版 (opens new window)🇨🇳,但是不能同时登陆两个版本的账号!此外,它支持在所有 IntelliJ IDE 中安装使用,例如: IntelliJ IDEA、PhpStorm、WebStorm、PyCharm、RubyMine、AppCode、CLion GoLand、DataGrip、Rider MPS、Android Studio 等等。

# 安装

Leetcode 是发布在官方插件中供所有人免费使用,所以它的安装方式也很简单,直接在 IDE 的插件库中搜索 leetcode editor,便可以进行安装!插件市场路径如下:

Preferences >> Plugins >> Marketplace

安装完成后,默认会询问你是否重启 IDE,没有的话,手动重启一下也是可以的,重启之后可以在Perferences >> Plugins >>Installed中查看已安装插件的状态,你可以确定一下是否启用了 leetcode editor ,一般默认情况下是启用了的。

image-20200705233708890

# 配置

安装完成之后,可在Perferences >> Plugins >> Tools >>leetcode plugin中设置详细账号信息。

image-20200705235038434

如图,详细设置内容解析如下:

  • URL:leetcode-cn.com 代表 🇨🇳 中国版,leetcode.com 代表 🌎 国际版。
  • Code Type:就是选择实现算法的编程语言。
  • LoginName:账户绑定的邮箱或手机号
  • Password:就是你的密码喏
  • TempFilePath:选择你想要把生成的代码文件放在什么位置
  • JCEFFilePath:不需要修改,保持默认就好
  • Custom Template:如果你想自定义生成的代码文件的模版格式,即修改CodeFileNameCodeTemplate两项内容,那你一定要记得勾选上这个选项,不然你对下面两项内容做任何修改都不会生效的。(我会告诉你我因没有勾选这个傻傻改了无数遍吗?😬)
  • Plugin update:允许插件更新
  • English content:题目内容的描述语言修改为英文
  • CodeFileName:生成的代码文件的命名格式
  • CodeTemplate:生成的代码文件的内容的规范格式
  • TemplateConstant:对相关 API 的解释说明

上图 CodeFileName:[${question.frontendQuestionId}]${question.title}是默认的命名模版,但是使用中文命名文件的方式基本是不能在本地编译。如果想在本地编译运行生成的代码文件,可以参考下面的模版:

CodeFileName:

LT_${question.frontendQuestionId}_$!velocityTool.camelCaseName(${question.titleSlug})

上边模版是先获取其英文标题然后通过提供的 API 转换为驼峰命名法

CodeTemplate:

// ${question.frontendQuestionId} ${question.title}
// ${question.titleSlug}

${question.content}

${question.code}

# 使用

参照上文中配置方法配置完成之后,可在项目界面的右下角找到 Leetcode 图标,点击即可出现小窗。

image-20200707222906376

提示:清空生成文件一定要慎重!!不然如果没有使用 git 版本管理工具的话,很有可能找不回来文件了!!

# 线上测试及提交

image-20200707225541431

# 本地调试

本地调试,由于环境不一,设定方式也略有不同。且由于每个题目调试用例也不尽相同,所以一般不建议本地调试。但是如果一定想要实现本地调试的模版,可以参考官方说明文档 (opens new window),对 CodeTemplate 进行自定义(读者:实际上是你不知道怎么写吧?🙄;我:😬🤫),以此来实现自动生成相关的测试实例,下面给出 Java 版的官方参考 CodeTemplate:

  ${question.content}

  package com.shuzijun.leetcode.editor.en;
  public class $!velocityTool.camelCaseName(${question.titleSlug}){
      public static void main(String[] args) {
           Solution solution = new $!velocityTool.camelCaseName(${question.titleSlug})().new Solution();
      }
      ${question.code}
  }

其实从上面的官方版本中也可以看出,它只是实现了一些比较统一的代码格式,并没有实现自动从网站获取具体的测试用例以方便再本地调试。所以即时按上文实施,具体的测试用例代码还是得自己每一次手动写,较为繁琐。如果开发者大大能看到此文,能在以后的版本实现自动获取测试用例在本地调试就太完美了。

# 特殊注释

需要注意的是,在生成的代码里包含两个注释:

  • leetcode submit region begin(Prohibit modification and deletion):提交到 leetcode 进行验证的代码开始标记
  • leetcode submit region end(Prohibit modification and deletion):提交到 leetcode 进行验证的代码结束标记

这两个注释标注了需要提交到 leetcode 的区域,这两行注释是不能被删除或者修改的,否则无法识别出提交的内容,如果多提交了其他代码,leetcode 会出现解答失败,同样区域内不能出现与解题无关的内容。

# 参考文章

文章 1 (opens new window)

文章 2 (opens new window)

文章 3 (opens new window)