DW_Leetcode编程实践_Day1

@DW_Leetcode编程实践_Day1

写在前面:这是第一次写博客,第一次做Leetcode,且python刚入门不久,所以难度颇大。因为是刚开始,所以都是参考别人的答案,并且尽量用最简单的方法来做题的。后面等熟练了,再说。

2.两数相加

题目链接:两数相加题目

题目理解与思路: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

4.寻找两个正序数组的中位数

题目链接:寻找中位数题目

题目理解与思路:这道题看评论说很难,所以我按照简单条件做了。

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]

5.最长回文子串

题目链接:最长回文子串题目

题目理解与思路:找到所有的子串,判断是否为回文子串

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

你可能感兴趣的:(python)