LEETCODE 01
02 两数相加
tag:链表
题目链接
解法一:迭代
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution:
def addTwoNumbers(self, l1: ListNode, l2: ListNode) -> ListNode:
###########迭代
dummy=p=ListNode(None)
s=0
while l1 or l2 or s:
s=(l1.val if l1 else 0)+(l2.val if l2 else 0)+s
p.next=ListNode(s%10)
p=p.next
s=s//10
l1=l1.next if l1 else None
l2=l2.next if l2 else None
return dummy.next
解法二:递归
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution:
def addTwoNumbers(self, l1: ListNode, l2: ListNode) -> ListNode:
###########递归
s=0
def dfs(l1,l2,s):
if not l1 and not l2 and not s: return None
s=(l1.val if l1 else 0) + (l2.val if l2 else 0)+s
node=ListNode(s%10)
node.next=dfs(l1.next if l1 else None, l2.next if l2 else None, s//10)
return node
return dfs(l1,l2,s)
时间复杂度:O(max(m,n))
空间复杂度:O(max(m,n))
04 寻找两个正序数据的中位数
寻找两个正序数据的中位数
暴力解法
class Solution:
def findMedianSortedArrays(self, nums1: List[int], nums2: List[int]) -> float:
m=nums1+nums2
n=sorted(m)
if len(n)%2 ==0:
return (n[int(len(n)/2)]+n[int(len(n)/2-1)])/2
else:
return n[int(len(n)/2)]
05 最长回文子串
class Solution:
def longestPalindrome(self, s: str) -> str:
##暴力解法,超时
if len(s)<2:
return s
maxlen=1
begin=0
#检查子串是否为回文子串
def issame(left,right):
while left<right:
if s[left]!=s[right]:
return False
left+=1
right-=1
return True
#找到所有子串
for i in range(len(s)-1):
for j in range(i+1,len(s)):
if j - i + 1 > maxlen and issame(i,j):
begin=i
maxlen=j-i+1
return s[begin:begin+maxlen]