分享一个优雅的leetcode力扣刷题姿势|intellij+leetcode-editor+github ...

种地  金牌会员 | 2024-11-13 06:15:49 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 931|帖子 931|积分 2793

引言

固然Leetcode自带的代码编辑器简便,但无法举行Debug和享受Intelli编码方式。另一方面,各种ide中固然有Intelli代码补全、集成化编译调试等功能,但却需要频繁复制粘贴。本文将为热衷刷题的读者提供一种优雅舒适的刷题方式——利用Intelli举行编码、本地调试、一键提交LeetCode、一键上传保管。
在本地IDE上编码LeetCode题目

LeetCode支持多种编程语言,如C/C++、Java、Python、C#、Javascript等。由于本文作者偏好利用Java语言编程,因此以Intelli IDEA(以下简称IDEA)为例。其他语言的IDE,如Pycharm、Clion乃至VSCode等,只要有插件功能都可以举行类似操作。
设置

打开idea的插件市场,搜索"leetcode-editor"下载安装,作者是shuzijun


新建一个项目,这个项目将专门用于存放我们的leetcode算法题文件,这里项目标根目录为:

   ~/leetcode_codeworks
  勾选上创建Git仓库(不希望长途保管代码请忽略)。
构建工具方面,对于算法学习项目来说,简单明白的IntelliJ即可。
点击创建

打开项目之后可以看到,左边侧边栏处多了一个leetcode标志样式的按钮,但是初次利用我们需要一些设置,使其初始化。


在src目录下新建一个软件包,取名为:leetcode.editor.cn,这个软件包的名字请不要变动



Main.java可以删除
设置leetcode_editor插件的各项属性。



  • 点击左侧边栏leetcode标志
  • 点击打开leetcode-editor设置页面
  • 选择CodeType为你的常用编程语言,这里选择Java
  • 输入Leetcode登陆用户名
  • 输入Leetcode登陆密码
  • TempFilePath请输入/你的项目根目录/src/,这里是 ~/leetcode_codeworks/src,这样能确保以后所有的代码文件都保存在我们创建好的软件包leetcode.editor.cn内,这是插件规定好的缓存目录
  • 勾选 Custom Template
  • 勾选 Cookie
  • 勾选 HtmlContent
  • 点击确定
登陆Leetcode

点击下图登录按钮

看到以下信息就成功了,同时题目列表也会刷新

如果初次登陆,大概会弹出一个窗口要求输入Cookie

请用欣赏器打开Leetcode网站举行登陆,登陆成功之后请打开欣赏器的开发者工具
点击网络,然后刷新网页,选择列表中第一个leetcode.cn。

一份有登陆信息的Cookie就在这里,请全部复制粘贴到刚才弹出的窗口中。

利用

可以看到它有很具体的利用说明

这里就不外多讲解了。
怎么做题?

以下是任意打开一道题目标界面,左边仍旧是题目列表,中间是题目形貌,右边是我们的编码窗口,此中已经给出了题目形貌和Solution类以及其成员方法。

下图中,箭头所指示的分别是运行用例,以及保存提交。点击这两个按钮后,代码并不会在本地运行,而是会将--BEGIN--和--END--之间的代码提交到leetcode.cn,在线编译运行。

点击左边侧边栏的项目按钮,先前新建的leetcode.editor.cn软件包下已经创建了一个doc文件夹(存放题目信息、提交信息等文件),***.java这是代码编辑栏里的代码所保存的文件。

但这个样子,显然不是能正常调试的样子。
设置生成模板

为了让插件能生成出我们能直接运行的文件的样子,我们需要自定义生成模板。请打开插件设置页面。需要设置的是Code FileName以及Code Template栏。

这里博主已经帮大家调好了,直接复制粘贴即可,大家也可以根据自己的偏好自行修改。
Code FileName:
  1. ID${question.frontendQuestionId}$!velocityTool.camelCaseName(${question.titleSlug})
复制代码
Code Template:
  1. package leetcode.editor.cn;import java.util.*;public class ID${question.frontendQuestionId}$!velocityTool.camelCaseName(${question.titleSlug})
  2. {        public static void main(String[] args) {                Solution solution = new ID${question.frontendQuestionId}$!velocityTool.camelCaseName(${question.titleSlug})
  3. ().new Solution();                StringBuilder sb = new StringBuilder();                                //执行测试                                System.out.println(sb);                        }${question.code}}
复制代码
保存后,再打开双击一道题,我们发现这已经是可以调试的样子了,可以打断点,也有intelli的主动补全等等功能。

有小伙伴会担心这会不会把上面那些不该提交的测试代码也上传到力扣了,从而导致编译失败。
不必担心,点击只会将--BEGIN--和--END--之间的代码提交到leetcode.cn,而在这之前可以点击绿色的播放按钮,在本地运行,只是这就需要在main()方法中自行写上测试用例了。
进阶

我们发如今做关于数据布局的算法题的时间,代码中难免会有类似ListNode这种自定义数据布局出现,导致代码爆红,固然仍可以提交运行,但是再也无法在本地自行调试了。

这可怎么办
这时间,可以将注释中给出的关于ListNode类的定义,复制一份下来,粘贴到Solution类的上方,作为主类的内部类举行调用。但如果每道题都需要这么复制,未免繁琐。
博主推荐以下方法:
创建leetcode.editor.util软件包,专门用于存放leetcode的自定义数据布局,类似于ListNode、TreeNode这些类都是很多题目通用的。
下面给出leetcode.editor.util.ListNode作为示例。除了官方给出的成员属性和构造方法之外,还重写了toString()方法,方便输出;添加了of()静态方法,方便输入;希望有肯定的开导作用,供读者朋友们参考。
  1. //leetcode.editor.util.ListNode
  2. package leetcode.editor.util;
  3. import java.util.Arrays;
  4. public class ListNode {
  5.     public int val;
  6.     public ListNode next;
  7.     public ListNode() {
  8.     }
  9.     public ListNode(int val) {
  10.         this.val = val;
  11.     }
  12.     public ListNode(int val, ListNode next) {
  13.         this.val = val;
  14.         this.next = next;
  15.     }
  16.     @Override
  17.     public String toString() {
  18.         StringBuilder sb = new StringBuilder("[");
  19.         ListNode p = this;
  20.         while (p != null) {
  21.             sb.append(p.val).append(',');
  22.             if (p.next == null) {
  23.                 sb.deleteCharAt(sb.length() - 1);
  24.             }
  25.             p = p.next;
  26.         }
  27.         return sb.append(']').toString();
  28.     }
  29.     /**
  30.      * @param s 形如"1,2,3,4,5"的字符串
  31.      * @return [1, 2, 3, 4, 5] 的头节点:1
  32.      */
  33.     public static ListNode of(String s) {
  34.         if ("".equals(s)) return null;
  35.         int[] array = Arrays.stream(s.split(",")).mapToInt(Integer::valueOf).toArray();
  36.         return of(array);
  37.     }
  38.     public static ListNode of(int... array){
  39.         ListNode _head = new ListNode(), p = _head;
  40.         for (int i : array) {
  41.             p.next = new ListNode(i);
  42.             p = p.next;
  43.         }
  44.         return _head.next;
  45.     }
  46. }
复制代码
最后再将插件的生成模板修改一下,加入一句import语句即可
修改之后的模板:
  1. package leetcode.editor.cn;import java.util.*;import leetcode.editor.util.*;public class ID${question.frontendQuestionId}$!velocityTool.camelCaseName(${question.titleSlug})
  2. {        public static void main(String[] args) {                Solution solution = new ID${question.frontendQuestionId}$!velocityTool.camelCaseName(${question.titleSlug})
  3. ().new Solution();                StringBuilder sb = new StringBuilder();                                //执行测试                                System.out.println(sb);                        }${question.code}}
复制代码
这样操作之后,每次打开一道新题目,就再也不用担心因为ListNode这种自定义数据布局类爆红了。
长途仓库保管

这一段,将为大家手把手奉上用git提交推送这些代码的步调。
设置git


(评论区有说需要再更新吧)
本地调试技巧

这一段,将为大家手把手奉上在这个编码环境下,快捷制作测试用例以及调试的技巧。
几种设置测试用例的方法


(评论区有说需要再更新吧)
小结

希望对读者朋友有所帮助,也希望如果有大佬有什么意见和发起欢迎提出,共同探讨!

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

种地

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表