├── 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 | 
41 |
42 | ### 右键菜单
43 |
44 | 右键 - `Tampermonkey`,可以看到 `leetcode-helper` 提供的功能。
45 |
46 | ### 插件栏
47 |
48 | 点击油猴插件,可以看到 `leetcode-helper` 提供的功能。
49 |
50 | ## 实现效果
51 |
52 | 
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 | })();
--------------------------------------------------------------------------------