@DW_Leetcode编程实践_Day1
写在前面:这是第一次写博客,第一次做Leetcode,且python刚入门不久,所以难度颇大。因为是刚开始,所以都是参考别人的答案,并且尽量用最简单的方法来做题的。后面等熟练了,再说。
题目链接:两数相加题目
题目理解与思路:1.还原两个非负整数;2.相加得到结果;3.将结果转换为一个链表
class Solution:
def addTwoNumbers(self, l1: ListNode, l2: ListNode) -> ListNode:
#1.还原两个非负整数;
num1 = str(l1.val)
while l1.next:
l1 = l1.next
num1 += str(l1.val)
num1 = int(num1[::-1])
num2 = str(l2.val)
while l2.next:
l2 = l2.next
num2 += str(l2.val)
num2 = int(num2[::-1])
#2.求和;
num = str(num1 + num2)
#3.还原结果。
L = len(num)
result = ListNode(int(num[0]))
for i in range(1, L):
result = ListNode(int(num[i]), result)
return result
题目链接:寻找中位数题目
题目理解与思路:这道题看评论说很难,所以我按照简单条件做了。
class Solution:
def findMedianSortedArrays(self, nums1: List[int], nums2: List[int]) -> float:
nums1.extend(nums2)
nums1=sorted(nums1)
length=len(nums1)
if length%2==0:
return (nums1[length//2]+nums1[length//2-1])/2
else:
return nums1[(length-1)//2]
题目链接:最长回文子串题目
题目理解与思路:找到所有的子串,判断是否为回文子串
class Solution:
def longestPalindrome(self, s: str) -> str:
# 特判
size = len(s)
if size < 2:
return s
max_len = 1
res = s[0]
# 枚举所有长度大于等于 2 的子串
for i in range(size - 1):
for j in range(i + 1, size):
if j - i + 1 > max_len and self.__valid(s, i, j):
max_len = j - i + 1
res = s[i:j + 1]
return res
def __valid(self, s, left, right):
# 验证子串 s[left, right] 是否为回文串
while left < right:
if s[left] != s[right]:
return False
left += 1
right -= 1
return True