文章目录

  • Idea插件 之 LeetCode Editor
    • 文档
    • 获取
    • 配置(第一次安装需要先配置)
      • 官网描述:
      • 自己配置:
  • 工具类:
    • ListNode :
    • TreeNode
    • 自定义工具类:

Idea插件 之 LeetCode Editor

文档

LeetCode Editor插件中文官网:https://github.com/shuzijun/leetcode-editor/blob/master/README_ZH.md


获取


配置(第一次安装需要先配置)

官网描述:



自己配置:

官方给的下图中第5、6步一个模板:https://github.com/shuzijun/leetcode-editor/blob/master/doc/CustomCode_ZH.md

我设置的文件名:

P${question.frontendQuestionId}_${question.title}/Main

文件模板:

package leetcode.editor.cn.P${question.frontendQuestionId}_${question.title};
public class Main{public static void main(String[] args) {Solution solution = new Solution();}
}
${question.code}

图示:

然后点这里选题:


工具类:

ListNode :

public class ListNode {public int val;public ListNode next;public ListNode() {}public ListNode(int val) { this.val = val; }public ListNode(int val, ListNode next) { this.val = val; this.next = next; }
}

TreeNode

public class TreeNode {public int val;public TreeNode left;public TreeNode right;public TreeNode() {}public TreeNode(int val) { this.val = val; }public TreeNode(int val, TreeNode left, TreeNode right) {this.val = val;this.left = left;this.right = right;}
}

自定义工具类:

力扣上刷题,想复制它的测试案例,直接在本地测试?不妨复制这个工具类

import com.alibaba.fastjson.JSONObject;
import com.ljy.commons.ListNode;
import com.ljy.commons.TreeNode;import java.lang.reflect.Constructor;
import java.lang.reflect.Method;
import java.util.*;public class LeetCodeUtil {/*** 根据数组生成链表** @param arr* @return*/public static ListNode getListNode(int[] arr) {ListNode listNode = new ListNode(arr[0]);ListNode head = listNode;for (int i = 1; i < arr.length; i++) {ListNode node = new ListNode(arr[i]);listNode.next = node;listNode = node;}listNode.next = null;return head;}/*** 打印链表** @param node*/public static void printListNode(ListNode node) {while (node != null) {String result = node.next == null ? node.val + "" : node.val + " --> ";node = node.next;System.out.print(result);}}/*** 根据数组生成二叉树** @param arr* @return*/public static TreeNode getTreeNode(Integer[] arr) {return getTreeNode(arr, 0);}/*** 根据数组生成二叉树** @param data* @return*/public static TreeNode getTreeNode(String data) {String[] strArr = string2stringArray(data)[0];Integer[] integerArr = new Integer[strArr.length];for (int i = 0; i < strArr.length; i++) {integerArr[i] = "null".equals(strArr[i]) ? null : Integer.parseInt(strArr[i]);}return getTreeNode(integerArr);}//层次法生成二叉树private static TreeNode getTreeNode(Integer[] arr, int index) {TreeNode node = null;if (index < arr.length) {if (arr[index] != null) {node = new TreeNode(arr[index]);node.left = getTreeNode(arr, 2 * index + 1);node.right = getTreeNode(arr, 2 * index + 2);}}return node;}//层次遍历public static void printTreeNode(TreeNode treeNode) {System.out.println("注:/、\\分别表示左子树、右子树");LinkedList<TreeNode> linkedList = new LinkedList<>();linkedList.add(treeNode);while (true) {if (linkedList == null || linkedList.size() == 0) break;//输出for (TreeNode t2 : linkedList) {System.out.print(String.format("%4s", t2.val));}System.out.println();//用于画线for (TreeNode t2 : linkedList) {StringBuilder sb = new StringBuilder();if (t2.left != null)sb.append("/");if (t2.right != null)sb.append("\\");System.out.print(String.format("%4s", sb.toString()));}System.out.println();//下一层linkedList = printTreeNode(linkedList);}}//根据i层获得i+1层private static LinkedList<TreeNode> printTreeNode(LinkedList<TreeNode> linkedList) {LinkedList<TreeNode> l2 = new LinkedList<>();if (linkedList == null || linkedList.size() == 0) {return null;}for (TreeNode t : linkedList) {if (t.left != null)l2.add(t.left);if (t.right != null)l2.add(t.right);}return l2;}/*** 对二叉树的节点排序并打印** @param root*/public static void printSortTreeNode(TreeNode root) {List list = new ArrayList();preOrder(root, list);Collections.sort(list);System.out.println(list);}/*** 二叉树先序遍历(非递归)** @param root*/private static void preOrder(TreeNode root, List list) {Stack<TreeNode> stack = new Stack<>();while (true) {while (root != null) {list.add(root.val);stack.push(root);root = root.left;}if (stack.isEmpty()) break;root = stack.pop();root = root.right;}}/*** 打印数组** @param arr*/public static void printArr(int[] arr) {for (int i = 0; i < arr.length; i++) {System.out.print(arr[i] + (i == arr.length - 1 ? "" : ","));}}public static void quickSort(int[] arr) {quickSort(arr, 0, arr.length - 1);}/*** 快排** @param arr* @param leftIndex* @param rightIndex*/public static void quickSort(int[] arr, int leftIndex, int rightIndex) {if (leftIndex >= rightIndex) {return;}int left = leftIndex;int right = rightIndex;//待排序的第一个元素作为基准值int key = arr[left];//从左右两边交替扫描,直到left = rightwhile (left < right) {while (right > left && arr[right] >= key) {//从右往左扫描,找到第一个比基准值小的元素right--;}//找到这种元素将arr[right]放入arr[left]中arr[left] = arr[right];while (left < right && arr[left] <= key) {//从左往右扫描,找到第一个比基准值大的元素left++;}//找到这种元素将arr[left]放入arr[right]中arr[right] = arr[left];}//基准值归位arr[left] = key;//对基准值左边的元素进行递归排序quickSort(arr, leftIndex, left - 1);//对基准值右边的元素进行递归排序。quickSort(arr, right + 1, rightIndex);}/*** 字符串转二维数组** @param s 例如:[[1,0],[99,97]]* @return 二维数组*/public static int[][] string2intArray(String s) {String[][] strings = string2stringArray(s);int[][] res = new int[strings.length][strings[0].length];String[] tmp;for (int i = 0; i < strings.length; i++) {tmp = strings[i];for (int j = 0; j < tmp.length; j++) {res[i][j] = Integer.parseInt(tmp[j]);}}return res;}/*** 字符串转二维数组** @param s 例如:[[1,0],[99,97]]* @return 二维数组的第0个*/public static int[] string2intArray0(String s){return string2intArray(s)[0];}/*** 字符串转二维数组。默认每一行数据个数相同** @param s 例如:[["1","0"],["99","97"]]* @return 二维数组*/public static String[][] string2stringArray(String s) {return string2stringArray(s,true);}/*** 字符串转二维数组。isSameLength = true 表示每一行数据个数相同* @param s 例如:[["1","0"],["99","97"]]* @param isSameLength 每一行的元素个数是否相同* @return*/public static String[][] string2stringArray(String s, boolean isSameLength) {// [[1,0],[99,97]]//去掉首尾的[]s = s.substring(s.indexOf("[") + 1, s.lastIndexOf("]"));//去掉所有的双引号s = s.replaceAll("\"", "");//使用,分隔 ==> [1,0]String[] row = s.split("],\\[");//每一行右相同个数的元素if (isSameLength){String[][] res = new String[row.length][];int colCount = row[0].split(",").length;for (int i = 0; i < row.length; i++) {res[i] = new String[colCount];String[] col = row[i].replace("[", "").replace("]", "").split(",");System.arraycopy(col, 0, res[i], 0, col.length);}return res;}else {String[][] res = new String[row.length][];for (int i = 0; i < row.length; i++) {res[i] = row[i].replace("[", "").replace("]", "").split(",");}return res;}}/*** 模拟力扣中的执行方法:* 例如:* ["MyLinkedList","addAtHead","addAtTail","addAtIndex","get","deleteAtIndex","get"]* [[],[1],[3],[1,2],[1],[1],[1]]** @param obj 执行哪个对象的方法?* @param method  方法的集合,例如:["MyLinkedList","addAtHead","addAtTail","addAtIndex","get","deleteAtIndex","get"]* @param param 参数的集合,例如:[[],[1],[3],[1,2],[1],[1],[1]]* @return 依次执行所有方法后的obj* @throws Exception*/public static Object invoke(Object obj, String method, String param) throws Exception {//["Trie","insert","search","search","startsWith","insert","search"]// [[],["apple"],["apple"],["app"],["app"],["app"],["app"]]String[] ms = string2stringArray(method)[0];String[][] ps = string2stringArray(param, false);//ps中空字符串转nullfor (int i = 0; i < ps.length; i++) {ps[i] = ps[i].length == 1 && ps[i][0].length() == 0 ? null : ps[i];}Class<?> objClass = obj.getClass();for (int i = 0; i < ms.length; i++) {String mi = ms[i];//如果以大写字母开头,则调用构造器int len = ps[i] == null ? 0 : ps[i].length;if (mi.charAt(0) <= 'Z') {for (Constructor<?> constructor : objClass.getConstructors()) {int parameterCount = constructor.getParameterCount();if (parameterCount == len) {System.out.println("==>构造器:" + constructor.getName() +Arrays.toString(ps[i]).replace("[", "(").replace("]", ")"));constructor.setAccessible(true);obj = constructor.newInstance(ps[i]);break;}}} else {//调用方法,传参数Method[] methods = objClass.getMethods();for (Method md : methods) {//参数个数int parameterCount = md.getParameterCount();//参数名一致,参数个数一致,很可能就是这个方法if (md.getName().equals(mi) && parameterCount == len) {md.setAccessible(true);//转化String数组类型的参数到我们想要的类型:Class<?>[] pts = md.getParameterTypes();Object[] psObj = new Object[pts.length];for (int k = 0; k < pts.length; k++) {psObj[k] = cast(pts[k], ps[i][k]);}System.out.println("==> 方法:" + md.getName() + "" +Arrays.toString(ps[i]).replace("[", "(").replace("]", ")"));//真正的开始执行方法:Object res = md.invoke(obj, psObj);System.out.println("<== " + res);break;}}}}return obj;}/*** 将字符串s转换为指定的class类型* @param clzz* @param s* 依赖于fastjson,可在pom中引入:*          <dependency>*             <groupId>com.alibaba</groupId>*             <artifactId>fastjson</artifactId>*             <version>1.2.75</version>*         </dependency>* @return*/private static Object cast(Class<?> clzz, String s) {String jsonString = JSONObject.toJSONString(s);return JSONObject.parseObject(jsonString, clzz);}
}

【LeetCode】刷题工具相关推荐

  1. 赞!Google 资深软件工程师 LeetCode 刷题笔记首次公开

    有人说写代码就像我们平时开车,仅凭经验你就可以将车开走:但当有一天,这辆车出问题跑不起来的时候,你不懂汽车的运行机制,你要怎么排除和解决问题?所以拥有扎实的数据结构和算法,才能开好编程这辆车. 作为程 ...

  2. C#LeetCode刷题,走进Google,走近人生

    该文章的最新版本已迁移至个人博客[比特飞],单击链接 C#LeetCode刷题,走进Google,走近人生 | .Net中文网 访问. 概述 本系列博文将会向大家介绍本人在钻研<算法导论 第3版 ...

  3. 【恋上数据结构】复杂度知识以及LeetCode刷题指南

    基础知识 什么是算法? 如何评判一个算法的好坏? 大O表示法(Big O) 对数阶的细节 常见的复杂度 多个数据规模的情况 LeetCode刷题指南 斐波那契数列复杂度分析 斐波那契数列 - 递归 斐 ...

  4. GitHub疯传,这个Leetcode刷题手册到底有多流弊?

    写在前面 最近一个读者和我反馈,他坚持刷题2个月,终于去了他梦寐以求的大厂,薪资涨幅非常可观,期间面字节跳动还遇到了原题...并表示目前国内的大厂和一些独角兽,已经越来越效仿硅谷公司的做法,通过面试给 ...

  5. GitHub标星90K,这份持续霸榜的Leetcode刷题手册到底有多强?

    写在前面 最近一个读者和我反馈,他坚持刷题2个月,终于去了他梦寐以求的大厂,薪资涨幅非常可观,期间面字节跳动还遇到了原题...并表示目前国内的大厂和一些独角兽,已经越来越效仿硅谷公司的做法,通过面试给 ...

  6. LeetCode刷题之旅正式开始

    开学三个多月了,但没写过多少代码,感觉再这样下去就废了.所以今天开始LeetCode刷题.这篇文章算是一个刷题的开端,主要写写为什么选择leetcode刷题,怎样刷题等问题. 1.为什么刷题? 我觉得 ...

  7. 小何同学的leetcode刷题笔记 基础篇(01)整数反转

    小何同学的leetcode刷题笔记 基础篇(01)整数反转[07] *** [01]数学取余法*** 对数字进行数位操作时,常见的方法便是用取余的方法提取出各位数字,再进行操作 操作(1):对10取余 ...

  8. 独家 | Google 资深软件工程师 LeetCode 刷题笔记首次公开

    有人说写代码就像我们平时开车,仅凭经验你就可以将车开走:但当有一天,这辆车出问题跑不起来的时候,你不懂汽车的运行机制,你要怎么排除和解决问题?所以拥有扎实的数据结构和算法,才能开好编程这辆车. 作为程 ...

  9. LeetCode刷题记录15——21. Merge Two Sorted Lists(easy)

    LeetCode刷题记录15--21. Merge Two Sorted Lists(easy) 目录 LeetCode刷题记录15--21. Merge Two Sorted Lists(easy) ...

  10. LeetCode刷题记录14——257. Binary Tree Paths(easy)

    LeetCode刷题记录14--257. Binary Tree Paths(easy) 目录 前言 题目 语言 思路 源码 后记 前言 数据结构感觉理论简单,实践起来很困难. 题目 给定一个二叉树, ...

最新文章

  1. 4 Skills that will Dramatically Increase Your Chance of Thriving as a Multipotentialite2017-12-09
  2. sessionFactory.getCurrent()和sessionFactory.openSession()的区别
  3. HDU - 4734 F(x) (2013成都网络游戏,数字DP)
  4. LeetCode 1758. 生成交替二进制字符串的最少操作数(DP)
  5. java 字母金字塔_LeetCode756:金字塔转换矩阵(JAVA题解)
  6. SpringBoot ——Spring Boot日志配置
  7. twisted系列教程十九–cancel deferred
  8. Centos系统添加系统用户操作记录审计
  9. UVALive - 6440(模拟)
  10. 目标检测YOLO系列论文对比
  11. centos7安装python3
  12. 智慧园区系统设计方案
  13. [SDOI2016]征途
  14. 使用git命令提交远程github仓库的时候提示rejected(拒绝)解决办法
  15. 计算机开机时间设置方法,win10系统设置电脑开关机时间的技巧介绍
  16. base64编码计算机网络,【MIME协议】base64编码与quoted-printable编码
  17. [FPGA] 1、Artix-7 35T Arty FPGA 评估套件学习 + SiFive risc-v 指令集芯片验证
  18. 陪玩视频聊天系统开发,升级与更新功能的实现
  19. 黑客攻防技术宝典(五)
  20. CSS 内外边距 float positio属性

热门文章

  1. 基于广度优先搜索的哈密顿图的判断算法
  2. sinx加expx定积分计算c语言,8.13 写一个用矩阵法求定积分的通用函数,分别求 sinx,cosx,exp(x)的积分;...
  3. matlab给函数积分,MATLAB函数积分
  4. Java面向对象编程
  5. CentOS修改tomcat端口
  6. React小书中得CommentList的需求实现
  7. WebSocket 实现聊天室业务
  8. Linux+Nginx+SpringBoot+War环境下websocket部署遇到的问题
  9. 100部超级好电影,100组优秀的字体设计(不看后悔系列)
  10. Android Builder模式