python leetcode 1 - 10

# 1 哈希表(好像是这个名字吧 没学过数据结构的咸鱼)
class Solution:
     def twoSum(self,s,t):    
        dict1=dict()
        for i in range(len(s)):
            temp=t-s[i]
            if temp in dict1:
                return (dict1[temp],i)
            dict1[s[i]]=i
# 2
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)
            p.next = ListNode(s % 10)
            p = p.next
            s //= 10
            l1 = l1.next if l1 else None
            l2 = l2.next if l2 else None
        return dummy.next
# 3
class Solution:
    def lengthOfLongestSubstring(self, s: str) -> int:
        l = 0
        res = 0
        dic = {}
        for i in range(len(s)):
            if s[i] not in s[l : i]:
                dic[s[i]] = i
                res = max(i - l + 1 , res)
            else:
                l = dic[s[i]] + 1
                dic[s[i]] = i
        return res
# 4 不会用二分 = = 
nums1.extend(nums2)
        allnum = nums1
        allnum = sorted(allnum)
        n = len(allnum)
        if n % 2 == 0:
            result = (allnum[n//2-1]+allnum[n//2])/2
        else:
            result = allnum[n//2]
        return result
# 5 分别讨论i , i + 1的回文情况
class Solution:
    def longestPalindrome(self, s: str) -> str:
        if not s: 
            return ''
        if len(s) == 1 or s == s[::-1]:
            return s
        res_len = 0
        for i in range(len(s)):
            l , r = i , i
            while l >= 0 and r <= len(s) - 1 and s[l] == s[r]:
                if res_len < r - l + 1:
                    res_len = r - l + 1
                    res = s[l : r + 1]
                l -= 1
                r += 1
            l , r = i , i + 1
            while l >= 0 and r <= len(s) - 1 and s[l] == s[r]:
                if res_len < r - l + 1:
                    res_len = r - l + 1
                    res = s[l : r + 1]
                l -= 1
                r += 1
        return res
# 6 硬着来
class Solution:
    def convert(self, s: str, numRows: int) -> str:
        if numRows <= 1:
            return s
        record = [[0] * len(s) for _ in range(numRows)]
        state = 'down'
        x , y = 0 , 0
        res = ''
        for i , j in enumerate(s):
            record[x][y] = j
            if state == 'down':
                if x != numRows - 1:
                    x += 1
                else:
                    state = 'up'
                    x -= 1
                    y += 1
            else:
                if x != 0:
                    x -= 1
                    y += 1
                else:
                    state = 'down'
                    x += 1
        for i in range(len(record)):
            for j in range(len(record[0])):
                if record[i][j] != 0:
                    res += record[i][j]
        return res
#不过居然才超过5% 还是重新写一种把...
class Solution:
    def convert(self, s: str, numRows: int) -> str:
        if numRows <= 1:
            return s
        j , flag = 0 , -1 
        res = [''] * numRows
        for i in s:
            if j == numRows - 1 or j == 0:
                flag = -flag
            res[j] += i
            j += flag
        return ''.join(res)

# 7 (也可以转成str然后str[::-1]在转成int)
class Solution:
    def reverse(self, x: int) -> int:
        flag = False
        if x < 0:
            flag = True
        res = 0
        x = abs(x)
        while x:
            x , y = divmod(x , 10)
            res =  (res * 10 + y)
        if res > 2 ** 31:
            return 0
        if flag:
            res = res * (-1)
        return res

# 8 正则表达式赛高!!!虽然不可能想到
class Solution:
    def myAtoi(self, s: str) -> int:
        return max(min(int(*re.findall('^[\+\-]?\d+', s.lstrip())), 2**31 - 1), -2**31)


# 9
class Solution:
    def isPalindrome(self, x: int) -> bool:
        if x < 0:
            return False
        str1 = str(x)
        if str1[::-1] == str1:
            return True
        else:
            return False

# 10 动态规划 永远的神 (抄的官方)
def isMatch(self, s: str, p: str) -> bool:
        m, n = len(s), len(p)

        def matches(i: int, j: int) -> bool:
            if i == 0:
                return False
            if p[j - 1] == '.':
                return True
            return s[i - 1] == p[j - 1]

        f = [[False] * (n + 1) for _ in range(m + 1)]
        f[0][0] = True
        for i in range(m + 1):
            for j in range(1, n + 1):
                if p[j - 1] == '*':
                    f[i][j] |= f[i][j - 2]
                    if matches(i, j - 1):
                        f[i][j] |= f[i - 1][j]
                else:
                    if matches(i, j):
                        f[i][j] |= f[i - 1][j - 1]
        return f[m][n]

# 咸鱼皓出版 转载请注明

 

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值