├── LICENSE ├── README.md ├── img └── image-20220503194601369.png └── leetcode-helper.js /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2022 tonngw 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | - ## 介绍 2 | 3 | 此油猴脚本是一个针对 LeetCode 题库,方便写题解的小工具。 4 | 5 | > 如果对你有帮助别忘了点个 `Star` 吖~。 6 | 7 | ## 功能 8 | 9 | 1. **复制**题目描述,并存入剪切板 10 | 2. 复制题目描述**生成**当前题目的题解模板,并存入剪切板 11 | 12 | 大多数情况下一道题目只会写一种做法,这里提供了一套简洁的模板,模板来自 `AcWing`。 13 | 14 | ## 快速开始 15 | 16 | `Alt + C` 生成当前题目的题解模板,打开写题解页面,`Ctrl + A` + `Ctrl + V` 一气呵成,开始写自己的逻辑。 17 | 18 | ## 安装 19 | 20 | **环境:** 21 | 22 | 1. Chrome 浏览器 / Edge 浏览器 23 | 2. 安装 `Tampermonkey` 油猴插件,这块大家自行搜索安装,网上有很多教程。 24 | 25 | **Option 1**:直接在 [https://greasyfork.org/zh-CN](https://greasyfork.org/zh-CN) 搜索 `leetcode-helper` 安装即可,或者通过 [此链接](https://greasyfork.org/zh-CN/scripts/444408-leetcode-helper) 直接安装。「推荐」 26 | 27 | **Option 2:**脚本源代码已经放在了[我的 GitHub 仓库](https://github.com/tonngw/leetcode-helper)中,可以复制自行安装。 28 | 29 | ## 如何使用 30 | 31 | ### 快捷键「推荐」 32 | 33 | - 功能 1 - `Alt + T(timu)` 34 | - 功能 2 - `Alt + C(copy)` 35 | 36 | 大家可以自行在源代码中修改快捷键 37 | 38 | ### 页面按钮 39 | 40 | ![demo.jpg](https://cdn.acwing.com/media/article/image/2023/05/30/52520_3f3cb130fe-demo.jpg) 41 | 42 | ### 右键菜单 43 | 44 | 右键 - `Tampermonkey`,可以看到 `leetcode-helper` 提供的功能。 45 | 46 | ### 插件栏 47 | 48 | 点击油猴插件,可以看到 `leetcode-helper` 提供的功能。 49 | 50 | ## 实现效果 51 | 52 | ![demo2.jpg](https://cdn.acwing.com/media/article/image/2023/05/30/52520_868ee009fe-demo2.jpg) 53 | 54 | ## 致谢 55 | 56 | 感谢以下作者提供的思路 57 | 58 | - [https://github.com/ZimoLoveShuang/leetcode-helper](https://github.com/ZimoLoveShuang/leetcode-helper) 59 | 60 | ## 参考资料 61 | 62 | - https://github.com/mixmark-io/turndown 63 | - https://bbs.tampermonkey.net.cn/ 64 | - https://github.com/t4t5/sweetalert 65 | - https://blog.csdn.net/u010598445/article/details/108880602 -------------------------------------------------------------------------------- /img/image-20220503194601369.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tonngw/leetcode-helper/bc3d9ca9fe28c21fcc7088a5780db3107d84c1f4/img/image-20220503194601369.png -------------------------------------------------------------------------------- /leetcode-helper.js: -------------------------------------------------------------------------------- 1 | // ==UserScript== 2 | // @name leetcode-helper 3 | // @namespace https://github.com/tonngw 4 | // @version 1.1.2 5 | // @description LeetCode 题解助手 | 复制 LeetCode 题目描述 | 生成当前题目题解模板 6 | // @author tonngw 7 | // @run-at document-end 8 | // @match https://leetcode.cn/problems/* 9 | // @icon data:image/x-icon;base64,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AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8BEhIScAcJCP0GBwf/BgcH/wYHB/8GBwf/BgcH/wcICPkUFxdkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////ARMRE3YICAj9BgcH/wYHB/8GBwf/BgcH/wYHB/8LDAzwJiYmLwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///wERERF2CAgJ/QYHB/8GBwf/BgcH/wYHB/8GBwf/EhISYgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8BEREUdQcICPwFBgb/BgcH/wYHB/8ICQn/HBwcSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////ARQUFHEJCgr2BwgI/wgJCf8QEBKdSUlJBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAlKSk+JiYmhiYmJldVVVUGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAgAAAAQAAAAAEA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 10 | // @require https://cdn.staticfile.org/jquery/3.4.1/jquery.min.js 11 | // @require https://unpkg.com/sweetalert/dist/sweetalert.min.js 12 | // @require https://unpkg.com/turndown/dist/turndown.js 13 | // @grant GM_registerMenuCommand 14 | // @grant GM_setClipboard 15 | // @license MIT 16 | // ==/UserScript== 17 | 18 | (function () { 19 | 'use strict'; 20 | 21 | // 初始化 html to markdown 转换工具 22 | var turndownService = new TurndownService(); 23 | 24 | const window = unsafeWindow; 25 | const description = '.description__2b0C'; 26 | var content = ''; 27 | 28 | // 注入菜单 29 | GM_registerMenuCommand("复制 LeetCode 题目为 Markdown,并存入剪切板", copy); 30 | GM_registerMenuCommand("生成当前题目的题解模板,并存入剪切板", generateSolution); 31 | 32 | // 添加复制按钮 33 | var copyBtn = document.createElement("button"); //创建一个 input 对象(提示框按钮) 34 | copyBtn.id = "copyBtn"; 35 | copyBtn.innerHTML = ' 复制'; 36 | copyBtn.style.width = "50px"; 37 | copyBtn.style.height = "25px"; 38 | copyBtn.style.align = "center"; 39 | copyBtn.style.marginLeft = "10px"; 40 | copyBtn.title = "复制题目为 Markdown 格式"; 41 | 42 | // 添加生成题解按钮 43 | var generateSolutionBtn = document.createElement("button"); // 创建一个input对象(提示框按钮) 44 | generateSolutionBtn.id = "generateSolutionBtn"; 45 | generateSolutionBtn.innerHTML = ' 生成'; 46 | generateSolutionBtn.style.width = "50px"; 47 | generateSolutionBtn.style.height = "25px"; 48 | generateSolutionBtn.style.align = "center"; 49 | generateSolutionBtn.style.marginLeft = "10px"; 50 | generateSolutionBtn.title = "生成 Markdown 格式题解"; 51 | 52 | window.onload = setTimeout(function () { 53 | var x = document.getElementsByClassName("mr-2 text-label-1 dark:text-dark-label-1 text-lg font-medium")[0]; 54 | console.log("I was invoked..."); 55 | x.parentNode.appendChild(copyBtn); 56 | x.parentNode.appendChild(generateSolutionBtn); 57 | }, 1500); 58 | 59 | // 为复制按钮绑定点击功能 60 | copyBtn.onclick = function (e) { 61 | e.preventDefault(); 62 | copy(); 63 | }; 64 | 65 | // 为复制按钮绑定点击功能 66 | generateSolutionBtn.onclick = function (e) { 67 | e.preventDefault(); 68 | generateSolution(); 69 | }; 70 | 71 | // 监听键盘按键,为功能绑定快捷键 72 | unsafeWindow.addEventListener("keydown", (evt) => { 73 | // console.log('evt', evt); 74 | if (evt.altKey) { 75 | // Alt + T 复制题目 76 | if (evt.keyCode == 84) { 77 | copy(); 78 | } 79 | // Alt + C 生成当前题目题解模板 80 | if (evt.keyCode == 67) { 81 | generateSolution(); 82 | } 83 | } 84 | }); 85 | 86 | // 题目复制功能实现 87 | function copy() { 88 | copyImpl(); 89 | GM_setClipboard(content); 90 | swal({ 91 | icon: "success", 92 | title: "复制成功", 93 | }); 94 | } 95 | 96 | function copyImpl() { 97 | // 题目描述 内容 Dom 98 | var contentDom = $('._1l1MA')[0].outerHTML; 99 | console.log(contentDom); 100 | content = handleHtml(contentDom); 101 | } 102 | 103 | // 生成题解功能实现 104 | function generateSolution() { 105 | generateSolutionImpl(); 106 | swal({ 107 | icon: "success", 108 | title: "生成成功", 109 | }); 110 | } 111 | 112 | function generateSolutionImpl() { 113 | var solutionTemplate = ""; 114 | var problemDescConst = "### 题目描述\n"; 115 | copyImpl(); 116 | var problemDesc = content; 117 | var splitLine = "\n\n---\n"; 118 | var algorithmConst = "### 算法\n" 119 | var specificAlgorithmConst = "#### (暴力枚举) $O(n^2)$"; 120 | var solution = "\nwrite here...\n\n" 121 | var timeComplexityConst = "#### 时间复杂度"; 122 | var timeComplexity = "\nwrite here...\n\n" 123 | var spaceComplexityConst = "#### 空间复杂度"; 124 | var spaceComplexity = "\nwrite here...\n\n"; 125 | var codeConst = "#### C++ 代码\n"; 126 | var code = "```\n" + "my code...\n" + "```"; 127 | solutionTemplate = problemDescConst + problemDesc + splitLine + algorithmConst + specificAlgorithmConst + 128 | solution + timeComplexityConst + timeComplexity + spaceComplexityConst + spaceComplexity + codeConst + code; 129 | GM_setClipboard(solutionTemplate); 130 | } 131 | 132 | /** 133 | * html 转 markdown 134 | * @param html 135 | * @returns {void|*} 136 | */ 137 | function handleHtml(html) { 138 | turndownService.addRule('strikethrough', { 139 | filter: ['pre'], 140 | replacement: function (content, node) { 141 | // console.log(node.innerText); 142 | return '\n```\n' + node.innerText.trim() + '\n```\n\n'; 143 | } 144 | }); 145 | turndownService.addRule('strikethrough', { 146 | filter: ['strong'], 147 | replacement: function (content) { 148 | return '**' + content + "**" 149 | } 150 | }); 151 | turndownService.addRule('strikethrough', { 152 | filter: ['code'], 153 | replacement: function (content) { 154 | return '$' + content + "$" 155 | } 156 | }); 157 | turndownService.addRule('strikethrough', { 158 | filter: ['sup'], 159 | replacement: function (content) { 160 | return '^{' + content + "}" 161 | } 162 | }); 163 | 164 | var markdown = turndownService.turndown(html); 165 | return markdown 166 | } 167 | })(); --------------------------------------------------------------------------------