Skip to content

Commit

Permalink
leetcode 刷题
Browse files Browse the repository at this point in the history
  • Loading branch information
Nightwish555 committed Feb 22, 2023
0 parents commit 9bc7eab
Show file tree
Hide file tree
Showing 37 changed files with 627 additions and 0 deletions.
3 changes: 3 additions & 0 deletions .idea/.gitignore

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

150 changes: 150 additions & 0 deletions .idea/inspectionProfiles/Project_Default.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 6 additions & 0 deletions .idea/inspectionProfiles/profiles_settings.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

10 changes: 10 additions & 0 deletions .idea/leetcode.iml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 4 additions & 0 deletions .idea/misc.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

8 changes: 8 additions & 0 deletions .idea/modules.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Empty file added 150to200/__init__.py
Empty file.
14 changes: 14 additions & 0 deletions 150to200/最大数.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
from typing import List


class Solution:
def largestNumber(self, nums: List[int]) -> str:

for i in range(len(nums) - 1):
for j in range(i + 1, len(nums)):
if str(nums[i]) + str(nums[j]) < str(nums[j]) + str(nums[i]):
nums[i], nums[j] = nums[j], nums[i]
s = ""
for num in nums:
s += str(num)
return str(int(s))
33 changes: 33 additions & 0 deletions 1to50/K 个一组翻转链表.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
# Definition for singly-linked list.
from typing import Optional
class ListNode:
def __init__(self, val=0, next=None):
self.val = val
self.next = next


class Solution:
def reverseKGroup(self, head: Optional[ListNode], k: int) -> Optional[ListNode]:
dummy = ListNode()
p = dummy
while True:
count = k
stack = []
tmp = head
while count and tmp:
stack.append(tmp)
tmp = tmp.next
count -= 1
if count:
p.next = head
break
while stack:
p.next = stack.pop()
p = p.next
p.next = tmp
head = tmp
return dummy.next


if __name__ == '__main__':
print(Solution().reverseKGroup([1, 2, 3, 4, 5], 2))
Empty file added 1to50/__init__.py
Empty file.
20 changes: 20 additions & 0 deletions 1to50/三数之和.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
from itertools import combinations
from typing import List


class Solution:
def threeSum(self, nums: List[int]) -> List[List[int]]:
L = []
for i in combinations(nums, 3):
if sum(list(i)) == 0:
L.append(list(i))
L1 = []
for j in L:
j.sort()
L1.append(j)
b = list(set([tuple(j) for j in L1]))
return [list(i) for i in b]


nums = [-1, 0, 1, 2, -1, -4]
print(Solution().threeSum(nums))
14 changes: 14 additions & 0 deletions 1to50/两两交换链表中的节点.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, val=0, next=None):
# self.val = val
# self.next = next
class Solution:
def swapPairs(self, head: Optional[ListNode]) -> Optional[ListNode]:
if not head or not head.next:
return head

tail = head.next
head.next = self.swapPairs(tail.next)
tail.next = head
return tail
22 changes: 22 additions & 0 deletions 1to50/两数之和.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
from typing import List


class Solution:

@staticmethod
def twoSum(nums: List[int], target: int) -> List[int]:
length = len(nums)
if length < 2:
return []
for k, v in enumerate(nums):

for j in range(k + 1, length):
if v + nums[j] == target:
return [k, j]
return []


if __name__ == '__main__':
nums = [3, 2, 4]
target = 6
print(Solution.twoSum(nums, target))
19 changes: 19 additions & 0 deletions 1to50/两数相加.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
# Definition for singly-linked list.

from typing import Optional


class ListNode:
def __init__(self, val=0, next=None):
self.val = val
self.next = next


class Solution:
def addTwoNumbers(self, l1, l2) -> Optional[ListNode]:
l1.val += l2.val
if l1.val > 10:
l1.next = self.addTwoNumbers(ListNode(l1.val // 10), l1.next)
l1.val %= 10
l1.next = self.addTwoNumbers(l1.next, l2.next)
return l1
7 changes: 7 additions & 0 deletions 1to50/冒泡排序.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
def bubbleSort(data: list):
length = len(data)
for i in range(length - 1):
for j in range(length - i - 1):
if data[j] > data[j + 1]:
data[j], data[j + 1] = data[j + 1], data[j]
return data
16 changes: 16 additions & 0 deletions 1to50/去除水印.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
from PyPDF2 import PdfReader, PdfWriter

output = PdfWriter()

reader = PdfReader(r"D:\CU_76a18490a1c94c20bda9ccfc81acabd6 (1).pdf")
# 获取总页数
page_count = reader.getNumPages()

# with open(,'rb') as pf:
# pin = PdfReader(pf)
# for i in range(2):
# page = pin.getPage(pin.pages[0])
# print(page)
# # output.addPage(page)
# # with open("XXXX/out.pdf",'wb') as ouf:
# # output.write(ouf)
24 changes: 24 additions & 0 deletions 1to50/合并K个升序链表.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
# Definition for singly-linked list.
class ListNode:
def __init__(self, val=0, next=None):
self.val = val
self.next = next


class Solution:
def mergeKLists(self, lists: List[Optional[ListNode]]) -> Optional[ListNode]:
heap = []
for sub_list in lists:
while sub_list:
heap.append(sub_list.val)
sub_list = sub_list.next
heap.sort(reverse=True)

head = ListNode(None)
curr_list = head
while heap:
# 从heap列表的尾部取最小数加入到链表中
temp_list = ListNode(heap.pop())
curr_list.next = temp_list
curr_list = curr_list.next
return head.next
13 changes: 13 additions & 0 deletions 1to50/回文数.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
class Solution:
def isPalindrome(self, x: int) -> bool:
if x < 0:
return False
x1 = str(x)[::-1]
if int(x1) == x:
return True
return False


if __name__ == '__main__':
x = -123
print(str(x)[::-1].isalnum())
12 changes: 12 additions & 0 deletions 1to50/字符串转换整数 (atoi).py
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
import re


class Solution:
def myAtoi(self, s: str) -> int:
INT_MAX = 2147483647
INT_MIN = -2147483648
str = s.lstrip() # 清除左边多余的空格
num_re = re.compile(r'^[\+\-]?\d+') # 设置正则规则
num = num_re.findall(str) # 查找匹配的内容
num = int(*num) # 由于返回的是个列表,解包并且转换成整数
return max(min(num, INT_MAX), INT_MIN) # 返回值
Loading

0 comments on commit 9bc7eab

Please sign in to comment.