LeetCode笔记:Weekly Contest 251(补发)

1. 题目一

给出题目一的试题链接如下:

1. 解题思路

这一题没啥好说的,按照题目意思进行变换操作即可。

2. 代码实现

给出python代码实现如下:

class Solution:
    def getLucky(self, s: str, k: int) -> int:
        s = "".join([str(ord(c)-ord('a')+1) for c in s])
        for _ in range(k):
            s = str(sum(int(c) for c in s))
        return int(s)

提交代码评测得到:耗时32ms,占用内存14.1MB。

2. 题目二

给出题目二的试题链接如下:

1. 解题思路

这题由于限制了substring必须是连续的,因此,我们就是找到第一个经过mapping之后会变大的字符,然后将以此为开头,然后所有的字符都满足变大关系的子串取出来进行变换即可。

2. 代码实现

给出python代码实现如下:

class Solution:
    def maximumNumber(self, num: str, change: List[int]) -> str:
        n = len(num)
        for i, c in enumerate(num):
            c = int(c)
            if change[c] <= c:
                continue
            j = i
            while j < n and change[int(num[j])] >= int(num[j]):
                j += 1
            return num[:i] + "".join([str(change[int(x)]) for x in num[i:j]]) + num[j:]
        return num

提交代码评测得到:耗时216ms,占用内存22.4MB。

3. 题目三

给出题目三的试题链接如下:

1. 解题思路

这一题也还好,首先计算每一个学生和老师的匹配分数,然后仿照八皇后问题进行求解即可。

2. 代码实现

给出python代码实现如下:

class Solution:
    def maxCompatibilitySum(self, students: List[List[int]], mentors: List[List[int]]) -> int:
        n = len(students)
        scores = [[sum([1-x^y for x, y in zip(students[i], mentors[j])]) for j in range(n)] for i in range(n)]
        
        @lru_cache(None)
        def dp(idx, status):
            if idx == n:
                return 0
            return max(scores[idx][i] + dp(idx+1, status^(1<<i)) for i in range(n) if status&(1<<i) == 0)
        
        return dp(0, 0)

提交代码评测得到:耗时56ms,占用内存14.7MB。

4. 题目四

给出题目四的试题链接如下:

1. 解题思路

放弃again,给出官方解答如下,有兴趣的读者自行研究一下吧……

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值