1
0
mirror of https://gitee.com/coder-xiaomo/leetcode-problemset synced 2025-12-16 23:52:34 +08:00
Code Issues Projects Releases Wiki Activity GitHub Gitee

126 Commits

Author SHA1 Message Date
2aacdf2f93 update 2024-12-20 00:35:26 +08:00
00a21292d6 update 2024-11-29 17:51:10 +08:00
988e8e3971 update 2024-11-29 17:49:27 +08:00
721407d9be update 2024-11-07 00:20:26 +08:00
921e076c8e update 2024-10-10 00:43:17 +08:00
zhangbk1
76e35939b6 update 2024-09-23 14:31:00 +08:00
zhangbk1
fc8e794743 update 2024-09-19 09:27:23 +08:00
1bb2fbd76e update 2024-08-27 23:06:51 +08:00
zhangbk1
91ca37c7ef update 2024-08-06 08:46:50 +08:00
zhangbk1
43a450d3d7 update 2024-07-16 16:03:30 +08:00
zhangbk1
847e599aec 忽略https警告;国外版力扣题库拉取失败问题修复;其他小问题修复 2024-07-16 16:02:46 +08:00
zhangbk1
b1fc2c627d update 2024-06-25 09:35:00 +08:00
b545ef1222 update 2024-06-25 01:21:44 +08:00
zhangbk1
f55b93a706 update 2024-06-05 08:53:56 +08:00
zhangbk1
4b8628b444 update 2024-06-05 08:50:06 +08:00
zhangbk1
a8fcd060a2 update 2024-05-16 15:32:41 +08:00
zhangbk1
59e97714b1 update 2024-04-30 10:04:49 +08:00
zhangbk1
45399227fb update 2024-04-07 13:02:43 +08:00
zhangbk1
7a26aa2bab update 2024-03-28 09:28:00 +08:00
zhangbk1
26ccf4c890 update 2024-03-28 09:27:27 +08:00
0bbe66ecc9 update 2024-03-22 16:17:44 +08:00
ed5c92e00e update 2024-03-22 16:17:08 +08:00
e31313baa5 update 2024-03-01 00:47:37 +08:00
5028bd771c update 2024-02-19 15:29:53 +08:00
6bfbd3556c update 2024-02-09 01:05:41 +08:00
a697596e35 update 2024-01-30 22:20:37 +08:00
zhangbk1
9e50b3cd07 update 2024-01-26 11:46:13 +08:00
zhangbk1
3a14465651 update 2024-01-19 16:10:00 +08:00
2817184d94 update 2024-01-13 00:12:16 +08:00
zhangbk1
cd5371cdc1 update 2024-01-10 09:17:31 +08:00
f05348ae2b update 2024-01-09 10:57:06 +08:00
f14c8312c2 update 2023-12-29 14:49:55 +08:00
a0a115e04c update 2023-12-22 22:12:55 +08:00
zhangbk1
359df08458 update 2023-12-20 15:51:53 +08:00
3770b44d1e update 2023-12-09 19:57:46 +08:00
9bc4722a45 update 2023-12-09 18:53:53 +08:00
c9b1bf36a8 存量数据更新 2023-12-09 18:50:31 +08:00
c198538f10 存量题库数据更新 2023-12-09 18:44:42 +08:00
a788808cd7 Merge branch 'master' of https://gitee.com/coder-xiaomo/leetcode-problemset 2023-12-09 01:21:21 +08:00
4616f1345d update 2023-12-09 01:16:38 +08:00
zhangbk1
26fce95b5c update 2023-11-27 09:10:49 +08:00
b011971a71 update 2023-11-17 00:14:34 +08:00
7d652958ba update 2023-11-13 00:01:27 +08:00
4cea624fbf update 2023-11-03 23:14:24 +08:00
25625a52f2 update 2023-10-25 00:17:09 +08:00
538ae7bb8b update 2023-10-15 20:45:13 +08:00
29fc260318 update 2023-10-05 03:40:53 +08:00
96286caf59 update 2023-10-05 03:40:12 +08:00
cb4f82d60a update 2023-09-24 19:54:57 +08:00
83a5997ef9 update 2023-09-20 00:01:18 +08:00
bdec4f9224 update 2023-09-09 15:39:12 +08:00
d2fdf8e86f update 2023-09-09 15:37:57 +08:00
9eb643f137 update 2023-09-01 19:42:45 +08:00
3a7fe98f11 update 2023-08-20 20:47:46 +08:00
e171f2875e update 2023-08-11 23:36:00 +08:00
4baa9b5a57 update 2023-07-16 12:28:13 +08:00
25bf8d9df8 update 2023-07-03 20:48:37 +08:00
e5097bc0f6 update 2023-06-22 23:08:40 +08:00
952a47471f update 2023-06-12 23:05:37 +08:00
96cb474414 update 2023-06-02 01:00:40 +08:00
0b115f313a update 2023-05-15 17:43:00 +08:00
9732c4f3bc update 2023-05-03 20:23:23 +08:00
e11824a0e7 update 2023-05-03 20:22:43 +08:00
6de82df1ca update 2023-04-23 22:41:08 +08:00
6465d37d92 update 2023-04-14 14:39:57 +08:00
b14260345b update 2023-04-04 00:28:56 +08:00
0f5817758d update 2023-04-04 00:26:09 +08:00
6e78d50055 update 2023-03-26 12:40:26 +08:00
560c99b559 update 2023-03-24 20:17:23 +08:00
48eaf39261 update 2023-02-27 23:41:45 +08:00
947eefea5d update 2023-02-11 23:56:20 +08:00
9f463eb5f6 update 2023-02-02 20:54:33 +08:00
9d367dc01f update 2023-01-23 20:16:24 +08:00
f8425bb3ee update 2023-01-14 00:20:24 +08:00
147005c405 update 2023-01-04 16:53:10 +08:00
32ab538e5f update 2022-12-24 21:54:49 +08:00
9ac85e5cbf update 2022-12-14 18:41:02 +08:00
ba2e2740b3 update 2022-12-04 20:08:50 +08:00
23a743b5be update 2022-11-24 20:11:13 +08:00
8a37a26300 update 2022-11-14 20:01:29 +08:00
932b731690 update 2022-11-09 15:08:24 +08:00
5f3c3f620f update 2022-11-01 20:43:12 +08:00
193158abb0 update 2022-10-26 20:38:53 +08:00
396e839079 update 2022-10-20 22:28:17 +08:00
a38bcc80d1 update 2022-10-15 20:04:57 +08:00
ee13c73307 update 2022-10-07 21:03:28 +08:00
b43009ddf3 update 2022-09-27 22:06:44 +08:00
068dd21d97 update 2022-09-24 11:01:54 +08:00
0b51c1f168 update 2022-09-19 22:42:50 +08:00
95eae7766c update 2022-09-17 21:23:12 +08:00
8f6be18759 update 2022-09-10 23:46:34 +08:00
96aa5b0ba0 update 2022-09-10 23:39:59 +08:00
e9f28d863c update 2022-09-04 10:46:24 +08:00
d928fedff8 update 2022-08-29 22:06:20 +08:00
6f2245ab62 update 2022-08-29 22:05:38 +08:00
85985929d8 update 2022-08-26 01:03:47 +08:00
321b55e52f update 2022-07-29 23:59:06 +08:00
e6b8964ee2 update 2022-07-24 00:13:40 +08:00
561e2f5094 update 2022-07-23 15:04:42 +08:00
3adfcf4fee update 2022-07-19 07:17:33 +00:00
86906ca247 update 2022-07-17 17:35:36 +08:00
ea34fbb843 update 2022-07-12 21:08:31 +08:00
210ba37692 update 2022-06-29 22:54:34 +08:00
8891b38740 update 2022-06-18 16:20:32 +08:00
6ba311f0f3 update 2022-06-10 23:34:17 +08:00
19b3e4846b update 2022-05-27 15:18:16 +08:00
f1a542154c update 2022-05-24 20:20:53 +08:00
f5bf94d67e update 2022-05-22 11:21:15 +08:00
f3b23d1fc3 update 2022-05-13 23:03:30 +08:00
2a71c78585 update 2022-05-02 23:44:12 +08:00
7ea03594b3 更新国内版力扣题目描述变更 2022-05-02 23:43:14 +08:00
74598d1cf8 更新国内版新增题目 2022-05-02 23:41:28 +08:00
7deedf5990 更新国外版力扣题目描述变更 2022-05-02 23:40:02 +08:00
7646741306 更新国外版新增题目 2022-05-02 23:39:22 +08:00
bc30d9a0a5 update;修复国外版脚本失效;修改国内版力扣地址 2022-05-02 23:30:21 +08:00
f3e61dc093 update 2022-04-24 17:05:32 +08:00
55953eb844 update 2022-04-03 22:51:40 +08:00
9930064684 update 2022-03-30 14:05:08 +08:00
3eb67e218e update 2022-03-30 14:03:28 +08:00
1ed06f8362 update 2022-03-30 14:02:24 +08:00
ad15da05aa update 2022-03-29 16:56:27 +08:00
e730aa6794 update 2022-03-29 15:21:05 +08:00
b84ae535b7 update 2022-03-29 12:55:24 +08:00
2b0511d272 update 2022-03-29 12:43:11 +08:00
58bbdfd57c update 2022-03-29 12:34:22 +08:00
79c876dc09 2022.03.29 例行更新 2022-03-29 12:32:14 +08:00
21697 changed files with 1459845 additions and 972580 deletions

View File

@@ -1,23 +1,54 @@
# 力扣题库(完整版)
使用 Python 脚本分批将力扣(国外版 `leetcode.com` 和 国内版 `leetcode-cn.com`)上面的题目下载下来,方便没有网的时候进行学习。
### 仓库内容介绍
- [x] 国外版力扣题库,在仓库 `算法题(国外版)` 文件夹下(其中的 html 文件)。
- [x] 国内版力扣题库,在仓库 `算法题(国内版)/problem (Chinese)` 文件夹下,对于同时有英文版的题目来说,英文版在仓库 `算法题(国内版)/problem (English)` 文件夹下。
### 一些说明
- 仅包含可以在网页上直接打开的公开题目,不包含 VIP 题目。
- 当前仓库的最后更新日期为 `2022.03.27`,仓库会每隔较长的一段时间从官方网站进行题目同步,同步后本仓库将更新。
> **注意!**
> 最后更新日期: **2024.12.20**
>
> **所有版权都为 LeetCode (及力扣中国) 官方所有,此处仅供学习使用,感谢 LeetCode 平台为我们提供大量的算法题目进行练习、提升。也请大家不要滥用,不要侵犯力扣平台的合法权益。**
> 使用脚本前请务必仔细完整阅读本 `README.md` 文件
---
### 仓库介绍
使用 Python 脚本分批将力扣(`leetcode.com``leetcode-cn.com`)上面的题目保存下来,方便没有网的时候进行学习。(仅包含可以在网页上直接打开的公开题目,不包含 VIP 题目)
### 仓库目录结构
国外版力扣题库,在仓库 `leetcode/problem` 文件夹下;国内版力扣题库,在仓库 `leetcode-cn/problem (Chinese)``leetcode-cn/problem (English)` 文件夹下。(部分题目只有中文版,无对应英文版)。
### 安装依赖
```bash
pip install -r requirements.txt
```
### 特别注意!
#### 版权相关
**所有版权都为 LeetCode (及力扣中国) 官方所有,此处仅供学习使用,不要他用。也请大家不要滥用,不要侵犯力扣平台的合法权益。**
**感谢 LeetCode 平台为我们提供大量的算法题目进行练习与提升。如果大家经济条件允许,请大家多多支持力扣,例如充充会员等。**
力扣题库的权益归属力扣,使用力扣题库,需要遵循力扣使用条例,若您不同意此条例,请立即关闭当前网页,不要继续使用本题库。
力扣LeetCode• 使用条例: https://leetcode-cn.com/terms-c/
LeetCode Terms of Service https://leetcode.com/terms/
#### 脚本原作者
Python脚本是在网上教程的基础上进行二改得到的原版地址https://blog.csdn.net/weixin_37267014/article/details/81429057
#### 其他
由于脚本运行时会向力扣网站发出大量请求,所以请大家不要随便尝试此脚本,以免影响力扣网站正常运行。
因为使用此脚本所造成的一系列问题,责任由您自己承担,作者不承担相应责任。
Python脚本是在网上教程的基础上进行二改得到的原版地址https://blog.csdn.net/weixin_37267014/article/details/81429057

21
get.bat Normal file
View File

@@ -0,0 +1,21 @@
git checkout master
git pull
git count-objects -vH
python leetcode.py
python leetcode-cn.py
git status
echo "<EFBFBD><EFBFBD>Ҫ<EFBFBD><EFBFBD><EFBFBD>͵<EFBFBD> Git <20>ֿ<EFBFBD>"
pause
git add .
git commit -m "update"
git gc
git remote add origin https://gitee.com/coder-xiaomo/leetcode-problemset
git push origin
git remote add github https://github.com/coder-xiaomo/leetcode-problemset
git push github
pause

151
leetcode-cn.py Normal file
View File

@@ -0,0 +1,151 @@
# coding:utf-8
import re
import json
import os
import threading
import time
import requests
from requests.exceptions import RequestException
from bs4 import BeautifulSoup
import urllib3
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
def get_proble_set(url):
try:
# response = requests.get(url)
response = requests.get(url, headers = {
'User-Agent': "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36"
}, verify=False)
if response.status_code == 200:
return response.text
return None
except RequestException:
return None
def parse_proble_set(problemSet):
# print(len(problemSet)) # 2573
for i in range(len(problemSet)):
title = problemSet[i]["stat"]["question__title_slug"]
if os.path.exists("originData/[no content]{}.json".format(title)) or os.path.exists("originData/{}.json".format(title)):
print(i, "has been parsed.")
# print("The question has been parsed: {}".format(title))
continue
#construct_url(title)
# time.sleep(0.5)
time.sleep(1)
t =threading.Thread(target=construct_url,args=(title,))
t.start()
print(i, "is done.")
continue
def construct_url(problemTitle):
url = "https://leetcode.cn/problems/" + problemTitle + "/"
# print(url)
get_proble_content(url, problemTitle)
def save_problem(title,content, editorType = ""):
#content = bytes(content,encoding = 'utf8')
filename = title + ".html"
if editorType == "MARKDOWN":
filename = title + ".md"
# else if editorType = "CKEDITOR":
with open(filename,'w+',encoding="utf-8")as f:
f.write(content)
def get_proble_content(problemUrl,title):
# 随便请求一个页面获取csrf_token
response = requests.get('https://leetcode.cn/graphql/', data = '''{"operationName":"userPremiumInfo","variables":{},"query":"query userPremiumInfo {\n userStatus {\n isPremium\n subscriptionPlanType\n __typename\n }\n}\n"}''')
setCookie = response.headers["set-cookie"]
# print(setCookie)
'''
print(setCookie)
setCookie = json.loads(setCookie)
print(type(setCookie))
'''
try:
pattern = re.compile(".*?csrftoken=(.*?);.*?",re.S)
csrftoken = re.search(pattern, setCookie)
# print(csrftoken.group(1))
url = "https://leetcode.cn/graphql"
data = {
"operationName":"questionData",
"variables":{"titleSlug":title},
"query": "query questionData($titleSlug: String!) {\n question(titleSlug: $titleSlug) {\n questionId\n questionFrontendId\n categoryTitle\n boundTopicId\n title\n titleSlug\n content\n translatedTitle\n translatedContent\n isPaidOnly\n difficulty\n likes\n dislikes\n isLiked\n similarQuestions\n contributors {\n username\n profileUrl\n avatarUrl\n __typename\n }\n langToValidPlayground\n topicTags {\n name\n slug\n translatedName\n __typename\n }\n companyTagStats\n codeSnippets {\n lang\n langSlug\n code\n __typename\n }\n stats\n hints\n solution {\n id\n canSeeDetail\n __typename\n }\n status\n sampleTestCase\n metaData\n judgerAvailable\n judgeType\n mysqlSchemas\n enableRunCode\n envInfo\n book {\n id\n bookName\n pressName\n source\n shortDescription\n fullDescription\n bookImgUrl\n pressImgUrl\n productUrl\n __typename\n }\n isSubscribed\n isDailyQuestion\n dailyRecordStatus\n editorType\n ugcQuestionId\n style\n exampleTestcases\n __typename\n }\n}\n"
}
headers = {
'x-csrftoken': csrftoken.group(1),
'referer':problemUrl,
'content-type':'application/json',
'origin':'https://leetcode.cn',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.139 Safari/537.36'
}
cookies = {
'__cfduid':'d9ce37537c705e759f6bea15fffc9c58b1525271602',
'_ga':'GA1.2.5783653.1525271604',
'_gid':'GA1.2.344320119.1533189808',
'csrftoken':csrftoken.group(1),
' _gat':'1'
}
#payload表单为json格式
dumpJsonData = json.dumps(data)
response = requests.post(url,data = dumpJsonData, headers = headers,cookies = cookies)
dictInfo = json.loads(response.text)
# print(response.text)
if dictInfo["data"]["question"].get("content") is not None:
saveJSON(dictInfo, "originData/" + title + ".json")
# 英文版
content = dictInfo["data"]["question"]["content"]
title = dictInfo["data"]["question"]["title"]
# 中文版
translatedContent = dictInfo["data"]["question"]["translatedContent"]
translatedTitle = dictInfo["data"]["question"]["translatedTitle"]
titleSlug = dictInfo["data"]["question"]["titleSlug"]
editorType = dictInfo["data"]["question"]["editorType"] # 分为 MARKDOWN 和 CKEDITOR 两种编辑器
# 中文版
save_problem("problem (Chinese)/" + translatedTitle + " [{}]".format(titleSlug), translatedContent, editorType)
# 英文版
if content != "" and content != "<p>English description is not available for the problem. Please switch to Chinese.</p>":
save_problem("problem (English)/" + translatedTitle + "(English) [{}]".format(titleSlug), content)
else:
pass # 有一些题目没有英文,那么就不保存
else:
saveJSON(dictInfo, "originData/[no content]" + title + ".json")
# print("no content")
except Exception as e:
print("[error] ", e, problemUrl)
def saveJSON(data, filename):
with open(filename, 'w', encoding='utf-8') as f:
json.dump(data, f, ensure_ascii=False, indent=4)
def main():
url = "https://leetcode.cn/api/problems/all/"
jsonContent = get_proble_set(url)
if jsonContent == None:
print('列表请求失败!')
return
html = json.loads(jsonContent)
saveJSON(html, "origin-data.json")
# html = json.load(open("origin-data.json", 'r', encoding='utf-8'))
problemset = html["stat_status_pairs"]
parse_proble_set(problemset)
if __name__=='__main__':
folderName = "leetcode-cn"
if not os.path.exists(folderName):
os.mkdir(folderName)
if not os.path.exists(folderName + "/originData"):
os.mkdir(folderName + "/originData")
if not os.path.exists(folderName + "/problem (Chinese)"):
os.mkdir(folderName + "/problem (Chinese)")
if not os.path.exists(folderName + "/problem (English)"):
os.mkdir(folderName + "/problem (English)")
os.chdir(folderName)
main()

79351
leetcode-cn/origin-data.json Normal file

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

Some files were not shown because too many files have changed in this diff Show More