Skip to content

Commit ca0152e

Browse files
committed
chore: getDataStructure 移入parseStructure文件
1 parent c0cbf39 commit ca0152e

File tree

5 files changed

+29
-25
lines changed

5 files changed

+29
-25
lines changed

common/resources/store.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
{"today":"2182","today-question-info":{"enName":"stone-game-vii","title":"石子游戏 VII","detail":"<p>石子游戏中,爱丽丝和鲍勃轮流进行自己的回合,<strong>爱丽丝先开始</strong> 。</p>\n\n<p>有 <code>n</code> 块石子排成一排。每个玩家的回合中,可以从行中 <strong>移除</strong> 最左边的石头或最右边的石头,并获得与该行中剩余石头值之 <strong>和</strong> 相等的得分。当没有石头可移除时,得分较高者获胜。</p>\n\n<p>鲍勃发现他总是输掉游戏(可怜的鲍勃,他总是输),所以他决定尽力 <strong>减小得分的差值</strong> 。爱丽丝的目标是最大限度地 <strong>扩大得分的差值</strong> 。</p>\n\n<p>给你一个整数数组 <code>stones</code> ,其中 <code>stones[i]</code> 表示 <strong>从左边开始</strong> 的第 <code>i</code> 个石头的值,如果爱丽丝和鲍勃都 <strong>发挥出最佳水平</strong> ,请返回他们 <strong>得分的差值</strong> 。</p>\n\n<p> </p>\n\n<p><strong>示例 1:</strong></p>\n\n<pre>\n<strong>输入:</strong>stones = [5,3,1,4,2]\n<strong>输出:</strong>6\n<strong>解释:</strong>\n- 爱丽丝移除 2 ,得分 5 + 3 + 1 + 4 = 13 。游戏情况:爱丽丝 = 13 ,鲍勃 = 0 ,石子 = [5,3,1,4] 。\n- 鲍勃移除 5 ,得分 3 + 1 + 4 = 8 。游戏情况:爱丽丝 = 13 ,鲍勃 = 8 ,石子 = [3,1,4] 。\n- 爱丽丝移除 3 ,得分 1 + 4 = 5 。游戏情况:爱丽丝 = 18 ,鲍勃 = 8 ,石子 = [1,4] 。\n- 鲍勃移除 1 ,得分 4 。游戏情况:爱丽丝 = 18 ,鲍勃 = 12 ,石子 = [4] 。\n- 爱丽丝移除 4 ,得分 0 。游戏情况:爱丽丝 = 18 ,鲍勃 = 12 ,石子 = [] 。\n得分的差值 18 - 12 = 6 。\n</pre>\n\n<p><strong>示例 2:</strong></p>\n\n<pre>\n<strong>输入:</strong>stones = [7,90,5,1,100,10,10,2]\n<strong>输出:</strong>122</pre>\n\n<p> </p>\n\n<p><strong>提示:</strong></p>\n\n<ul>\n\t<li><code>n == stones.length</code></li>\n\t<li><code>2 <= n <= 1000</code></li>\n\t<li><code>1 <= stones[i] <= 1000</code></li>\n</ul>\n","id":"1690","jsCode":"/**\n * @param {number[]} stones\n * @return {number}\n */\nvar stoneGameVII = function(stones) {\n\n};","date":"2024-02-03"},"today-tag":"82","random-id":1314,"random-question-info":{"enName":"multiply-strings","title":"字符串相乘","detail":"<p>给定两个以字符串形式表示的非负整数&nbsp;<code>num1</code>&nbsp;和&nbsp;<code>num2</code>,返回&nbsp;<code>num1</code>&nbsp;和&nbsp;<code>num2</code>&nbsp;的乘积,它们的乘积也表示为字符串形式。</p>\n\n<p><strong>注意:</strong>不能使用任何内置的 BigInteger 库或直接将输入转换为整数。</p>\n\n<p>&nbsp;</p>\n\n<p><strong>示例 1:</strong></p>\n\n<pre>\n<strong>输入:</strong> num1 = \"2\", num2 = \"3\"\n<strong>输出:</strong> \"6\"</pre>\n\n<p><strong>示例&nbsp;2:</strong></p>\n\n<pre>\n<strong>输入:</strong> num1 = \"123\", num2 = \"456\"\n<strong>输出:</strong> \"56088\"</pre>\n\n<p>&nbsp;</p>\n\n<p><strong>提示:</strong></p>\n\n<ul>\n\t<li><code>1 &lt;= num1.length, num2.length &lt;= 200</code></li>\n\t<li><code>num1</code>&nbsp;和 <code>num2</code>&nbsp;只能由数字组成。</li>\n\t<li><code>num1</code>&nbsp;和 <code>num2</code>&nbsp;都不包含任何前导零,除了数字0本身。</li>\n</ul>\n","id":"43","jsCode":"/**\n * @param {string} num1\n * @param {string} num2\n * @return {string}\n */\nvar multiply = function(num1, num2) {\n\n};"},"specified-question-info":{"enName":"clone-graph","title":"克隆图","detail":"<p>给你无向&nbsp;<strong><a href=\"https://baike.baidu.com/item/连通图/6460995?fr=aladdin\" target=\"_blank\">连通</a>&nbsp;</strong>图中一个节点的引用,请你返回该图的&nbsp;<a href=\"https://baike.baidu.com/item/深拷贝/22785317?fr=aladdin\" target=\"_blank\"><strong>深拷贝</strong></a>(克隆)。</p>\n\n<p>图中的每个节点都包含它的值 <code>val</code>(<code>int</code>) 和其邻居的列表(<code>list[Node]</code>)。</p>\n\n<pre>class Node {\n public int val;\n public List&lt;Node&gt; neighbors;\n}</pre>\n\n<p>&nbsp;</p>\n\n<p><strong>测试用例格式:</strong></p>\n\n<p>简单起见,每个节点的值都和它的索引相同。例如,第一个节点值为 1(<code>val = 1</code>),第二个节点值为 2(<code>val = 2</code>),以此类推。该图在测试用例中使用邻接列表表示。</p>\n\n<p><strong>邻接列表</strong> 是用于表示有限图的无序列表的集合。每个列表都描述了图中节点的邻居集。</p>\n\n<p>给定节点将始终是图中的第一个节点(值为 1)。你必须将&nbsp;<strong>给定节点的拷贝&nbsp;</strong>作为对克隆图的引用返回。</p>\n\n<p>&nbsp;</p>\n\n<p><strong>示例 1:</strong></p>\n\n<p><img alt=\"\" src=\"https://assets.leetcode-cn.com/aliyun-lc-upload/uploads/2020/02/01/133_clone_graph_question.png\" style=\"height: 500px; width: 500px;\"></p>\n\n<pre><strong>输入:</strong>adjList = [[2,4],[1,3],[2,4],[1,3]]\n<strong>输出:</strong>[[2,4],[1,3],[2,4],[1,3]]\n<strong>解释:\n</strong>图中有 4 个节点。\n节点 1 的值是 1,它有两个邻居:节点 2 和 4 。\n节点 2 的值是 2,它有两个邻居:节点 1 和 3 。\n节点 3 的值是 3,它有两个邻居:节点 2 和 4 。\n节点 4 的值是 4,它有两个邻居:节点 1 和 3 。\n</pre>\n\n<p><strong>示例 2:</strong></p>\n\n<p><img alt=\"\" src=\"https://assets.leetcode-cn.com/aliyun-lc-upload/uploads/2020/02/01/graph.png\" style=\"height: 148px; width: 163px;\"></p>\n\n<pre><strong>输入:</strong>adjList = [[]]\n<strong>输出:</strong>[[]]\n<strong>解释:</strong>输入包含一个空列表。该图仅仅只有一个值为 1 的节点,它没有任何邻居。\n</pre>\n\n<p><strong>示例 3:</strong></p>\n\n<pre><strong>输入:</strong>adjList = []\n<strong>输出:</strong>[]\n<strong>解释:</strong>这个图是空的,它不含任何节点。\n</pre>\n\n<p><strong>示例 4:</strong></p>\n\n<p><img alt=\"\" src=\"https://assets.leetcode-cn.com/aliyun-lc-upload/uploads/2020/02/01/graph-1.png\" style=\"height: 133px; width: 272px;\"></p>\n\n<pre><strong>输入:</strong>adjList = [[2],[1]]\n<strong>输出:</strong>[[2],[1]]</pre>\n\n<p>&nbsp;</p>\n\n<p><strong>提示:</strong></p>\n\n<ol>\n\t<li>节点数不超过 100 。</li>\n\t<li>每个节点值&nbsp;<code>Node.val</code> 都是唯一的,<code>1 &lt;= Node.val &lt;= 100</code>。</li>\n\t<li>无向图是一个<a href=\"https://baike.baidu.com/item/简单图/1680528?fr=aladdin\" target=\"_blank\">简单图</a>,这意味着图中没有重复的边,也没有自环。</li>\n\t<li>由于图是无向的,如果节点 <em>p</em> 是节点 <em>q</em> 的邻居,那么节点 <em>q</em> 也必须是节点 <em>p</em>&nbsp;的邻居。</li>\n\t<li>图是连通图,你可以从给定节点访问到所有节点。</li>\n</ol>\n","id":"133","jsCode":"/**\n * // Definition for a Node.\n * function Node(val, neighbors) {\n * this.val = val === undefined ? 0 : val;\n * this.neighbors = neighbors === undefined ? [] : neighbors;\n * };\n */\n\n/**\n * @param {Node} node\n * @return {Node}\n */\nvar cloneGraph = function(node) {\n \n};"}}
1+
{"today":"2182","today-question-info":{"enName":"stone-game-vii","title":"石子游戏 VII","detail":"<p>石子游戏中,爱丽丝和鲍勃轮流进行自己的回合,<strong>爱丽丝先开始</strong> 。</p>\n\n<p>有 <code>n</code> 块石子排成一排。每个玩家的回合中,可以从行中 <strong>移除</strong> 最左边的石头或最右边的石头,并获得与该行中剩余石头值之 <strong>和</strong> 相等的得分。当没有石头可移除时,得分较高者获胜。</p>\n\n<p>鲍勃发现他总是输掉游戏(可怜的鲍勃,他总是输),所以他决定尽力 <strong>减小得分的差值</strong> 。爱丽丝的目标是最大限度地 <strong>扩大得分的差值</strong> 。</p>\n\n<p>给你一个整数数组 <code>stones</code> ,其中 <code>stones[i]</code> 表示 <strong>从左边开始</strong> 的第 <code>i</code> 个石头的值,如果爱丽丝和鲍勃都 <strong>发挥出最佳水平</strong> ,请返回他们 <strong>得分的差值</strong> 。</p>\n\n<p> </p>\n\n<p><strong>示例 1:</strong></p>\n\n<pre>\n<strong>输入:</strong>stones = [5,3,1,4,2]\n<strong>输出:</strong>6\n<strong>解释:</strong>\n- 爱丽丝移除 2 ,得分 5 + 3 + 1 + 4 = 13 。游戏情况:爱丽丝 = 13 ,鲍勃 = 0 ,石子 = [5,3,1,4] 。\n- 鲍勃移除 5 ,得分 3 + 1 + 4 = 8 。游戏情况:爱丽丝 = 13 ,鲍勃 = 8 ,石子 = [3,1,4] 。\n- 爱丽丝移除 3 ,得分 1 + 4 = 5 。游戏情况:爱丽丝 = 18 ,鲍勃 = 8 ,石子 = [1,4] 。\n- 鲍勃移除 1 ,得分 4 。游戏情况:爱丽丝 = 18 ,鲍勃 = 12 ,石子 = [4] 。\n- 爱丽丝移除 4 ,得分 0 。游戏情况:爱丽丝 = 18 ,鲍勃 = 12 ,石子 = [] 。\n得分的差值 18 - 12 = 6 。\n</pre>\n\n<p><strong>示例 2:</strong></p>\n\n<pre>\n<strong>输入:</strong>stones = [7,90,5,1,100,10,10,2]\n<strong>输出:</strong>122</pre>\n\n<p> </p>\n\n<p><strong>提示:</strong></p>\n\n<ul>\n\t<li><code>n == stones.length</code></li>\n\t<li><code>2 <= n <= 1000</code></li>\n\t<li><code>1 <= stones[i] <= 1000</code></li>\n</ul>\n","id":"1690","jsCode":"/**\n * @param {number[]} stones\n * @return {number}\n */\nvar stoneGameVII = function(stones) {\n\n};","date":"2024-02-03"},"today-tag":"82","random-id":1314,"random-question-info":{"enName":"multiply-strings","title":"字符串相乘","detail":"<p>给定两个以字符串形式表示的非负整数&nbsp;<code>num1</code>&nbsp;和&nbsp;<code>num2</code>,返回&nbsp;<code>num1</code>&nbsp;和&nbsp;<code>num2</code>&nbsp;的乘积,它们的乘积也表示为字符串形式。</p>\n\n<p><strong>注意:</strong>不能使用任何内置的 BigInteger 库或直接将输入转换为整数。</p>\n\n<p>&nbsp;</p>\n\n<p><strong>示例 1:</strong></p>\n\n<pre>\n<strong>输入:</strong> num1 = \"2\", num2 = \"3\"\n<strong>输出:</strong> \"6\"</pre>\n\n<p><strong>示例&nbsp;2:</strong></p>\n\n<pre>\n<strong>输入:</strong> num1 = \"123\", num2 = \"456\"\n<strong>输出:</strong> \"56088\"</pre>\n\n<p>&nbsp;</p>\n\n<p><strong>提示:</strong></p>\n\n<ul>\n\t<li><code>1 &lt;= num1.length, num2.length &lt;= 200</code></li>\n\t<li><code>num1</code>&nbsp;和 <code>num2</code>&nbsp;只能由数字组成。</li>\n\t<li><code>num1</code>&nbsp;和 <code>num2</code>&nbsp;都不包含任何前导零,除了数字0本身。</li>\n</ul>\n","id":"43","jsCode":"/**\n * @param {string} num1\n * @param {string} num2\n * @return {string}\n */\nvar multiply = function(num1, num2) {\n\n};"},"specified-question-info":{"enName":"reverse-nodes-in-k-group","title":"K 个一组翻转链表","detail":"<p>给你链表的头节点 <code>head</code> ,每&nbsp;<code>k</code><em>&nbsp;</em>个节点一组进行翻转,请你返回修改后的链表。</p>\n\n<p><code>k</code> 是一个正整数,它的值小于或等于链表的长度。如果节点总数不是&nbsp;<code>k</code><em>&nbsp;</em>的整数倍,那么请将最后剩余的节点保持原有顺序。</p>\n\n<p>你不能只是单纯的改变节点内部的值,而是需要实际进行节点交换。</p>\n\n<p>&nbsp;</p>\n\n<p><strong>示例 1:</strong></p>\n<img alt=\"\" src=\"https://assets.leetcode.com/uploads/2020/10/03/reverse_ex1.jpg\" style=\"width: 542px; height: 222px;\" />\n<pre>\n<strong>输入:</strong>head = [1,2,3,4,5], k = 2\n<strong>输出:</strong>[2,1,4,3,5]\n</pre>\n\n<p><strong>示例 2:</strong></p>\n\n<p><img alt=\"\" src=\"https://assets.leetcode.com/uploads/2020/10/03/reverse_ex2.jpg\" style=\"width: 542px; height: 222px;\" /></p>\n\n<pre>\n<strong>输入:</strong>head = [1,2,3,4,5], k = 3\n<strong>输出:</strong>[3,2,1,4,5]\n</pre>\n\n<p>&nbsp;</p>\n<strong>提示:</strong>\n\n<ul>\n\t<li>链表中的节点数目为 <code>n</code></li>\n\t<li><code>1 &lt;= k &lt;= n &lt;= 5000</code></li>\n\t<li><code>0 &lt;= Node.val &lt;= 1000</code></li>\n</ul>\n\n<p>&nbsp;</p>\n\n<p><strong>进阶:</strong>你可以设计一个只用 <code>O(1)</code> 额外内存空间的算法解决此问题吗?</p>\n\n<ul>\n</ul>\n","id":"25","jsCode":"/**\n * Definition for singly-linked list.\n * function ListNode(val, next) {\n * this.val = (val===undefined ? 0 : val)\n * this.next = (next===undefined ? null : next)\n * }\n */\n/**\n * @param {ListNode} head\n * @param {number} k\n * @return {ListNode}\n */\nvar reverseKGroup = function(head, k) {\n\n};"}}

common/utils/getTestCase.js

+2-20
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,4 @@
1-
/**
2-
* 获取test case 入参的数据类型
3-
* @param {string} jsCode leetcode的实例函数体
4-
* @param {string} type 类型,param入参,returns返回值
5-
* @returns {string[]}
6-
*/
7-
const getDataStructure = (jsCode, type = 'param') => {
8-
const regexMap = {
9-
param: /@param\s+{\s*([^}\s]+)\s*}/g,
10-
return: /@return\s+{\s*([^}\s]+)\s*}/g,
11-
};
12-
const regex = regexMap[type];
13-
const paramTypes = [];
14-
let match;
15-
while ((match = regex.exec(jsCode)) !== null) {
16-
paramTypes.push(match[1]);
17-
}
18-
return paramTypes;
19-
};
1+
const { getDataStructure } = require('./parseStructure');
202

213
/**
224
* test case 需要从两个地方拿到内容
@@ -44,4 +26,4 @@ function getTestCase(question) {
4426
}
4527
)`;
4628
}
47-
module.exports = { getTestCase, getDataStructure };
29+
module.exports = { getTestCase };

common/utils/parseStructure.js

+20-1
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,25 @@ const setDataStructure = (params, structs, type = 'cases') => params.map((param,
3434
return map[struct] ? map[struct](param) : map.default(param);
3535
});
3636

37+
/**
38+
* 获取test case 入参的数据类型
39+
* @param {string} jsCode leetcode的实例函数体
40+
* @param {string} type 类型,param入参,returns返回值
41+
* @returns {string[]}
42+
*/
43+
const getDataStructure = (jsCode, type = 'param') => {
44+
const regexMap = {
45+
param: /@param\s+{\s*([^}\s]+)\s*}/g,
46+
return: /@return\s+{\s*([^}\s]+)\s*}/g,
47+
};
48+
const regex = regexMap[type];
49+
const paramTypes = [];
50+
let match;
51+
while ((match = regex.exec(jsCode)) !== null) {
52+
paramTypes.push(match[1]);
53+
}
54+
return paramTypes;
55+
};
3756
module.exports = {
38-
setDataStructure,
57+
setDataStructure, getDataStructure,
3958
};

src/25.reverse-nodes-in-k-group/index.js

+5-2
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,11 @@ const { showLogs } = require("../../common/utils/withTimeLog");
3232
* @param {number} k
3333
* @return {ListNode}
3434
*/
35+
/**
36+
* @param {ListNode} head
37+
* @param {number} k
38+
* @return {ListNode}
39+
*/
3540
var reverseKGroup = function(head, k) {
3641
let stack = [];
3742
let dummy = { next: head };
@@ -58,8 +63,6 @@ var reverseKGroup = function(head, k) {
5863
return dummy.next;
5964
};
6065

61-
62-
6366
/**
6467
* Test case
6568
*/

test/setDataStructure.spec.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
import {test, expect, describe} from 'vitest';
33
const { showLogs } = require("../common/utils/withTimeLog");
44
const { ListNode, convertListNode } = require("../common/structures/ListNode");
5-
import {getDataStructure} from '../common/utils/getTestCase';
5+
import { getDataStructure } from "../common/utils/parseStructure";
66

77

88

0 commit comments

Comments
 (0)