0218leetcode刷题5道python

566

题目描述:
在MATLAB中,有一个非常有用的函数 reshape,它可以将一个矩阵重塑为另一个大小不同的新矩阵,但保留其原始数据。
给出一个由二维数组表示的矩阵,以及两个正整数r和c,分别表示想要的重构的矩阵的行数和列数。
重构后的矩阵需要将原始矩阵的所有元素以相同的行遍历顺序填充。
如果具有给定参数的reshape操作是可行且合理的,则输出新的重塑矩阵;否则,输出原始矩阵。

示例:
在这里插入图片描述
解答:

class Solution:
    def matrixReshape(self, nums: List[List[int]], r: int, c: int) -> List[List[int]]:
        if len(nums)*len(nums[0])!=r*c:
            return nums
        l=[]
        for i in nums:
            l+=i
        return [[l.pop(0) for i in range(c)] for j in range(r)]

832

题目描述:
给定一个二进制矩阵 A,我们想先水平翻转图像,然后反转图像并返回结果。
水平翻转图片就是将图片的每一行都进行翻转,即逆序。例如,水平翻转 [1, 1, 0] 的结果是 [0, 1, 1]。
反转图片的意思是图片中的 0 全部被 1 替换, 1 全部被 0 替换。例如,反转 [0, 1, 1] 的结果是 [1, 0, 0]。

示例:
在这里插入图片描述
解答:

class Solution:
    def flipAndInvertImage(self, A: List[List[int]]) -> List[List[int]]:
        for i in range(len(A)):
            for j in range((len(A)+1)//2):
                if A[i][j]==A[i][-1-j]:
                    t=1-A[i][j]
                    A[i][j]=A[i][-1-j]=t
        return A

1160

题目描述:
给你一份『词汇表』(字符串数组) words 和一张『字母表』(字符串) chars。
假如你可以用 chars 中的『字母』(字符)拼写出 words 中的某个『单词』(字符串),那么我们就认为你掌握了这个单词。
注意:每次拼写(指拼写词汇表中的一个单词)时,chars 中的每个字母都只能用一次。
返回词汇表 words 中你掌握的所有单词的 长度之和。

示例:
在这里插入图片描述
解答:

class Solution:
    def countCharacters(self, words: List[str], chars: str) -> int:
        ans = 0
        for w in words:
            for i in w:
                if w.count(i) <= chars.count(i):
                    flag = 1
                    continue
                else:
                    flag = 0
                    break
            if flag == 1:
                ans+=len(w)
        return ans

1370

题目描述:
给你一个字符串 s ,请你根据下面的算法重新构造字符串:
从 s 中选出 最小 的字符,将它 接在 结果字符串的后面。
从 s 剩余字符中选出 最小 的字符,且该字符比上一个添加的字符大,将它 接在 结果字符串后面。
重复步骤 2 ,直到你没法从 s 中选择字符。
从 s 中选出 最大 的字符,将它 接在 结果字符串的后面。
从 s 剩余字符中选出 最大 的字符,且该字符比上一个添加的字符小,将它 接在 结果字符串后面。
重复步骤 5 ,直到你没法从 s 中选择字符。
重复步骤 1 到 6 ,直到 s 中所有字符都已经被选过。
在任何一步中,如果最小或者最大字符不止一个 ,你可以选择其中任意一个,并将其添加到结果字符串。
请你返回将 s 中字符重新排序后的 结果字符串 。

示例:
在这里插入图片描述
解答:

class Solution:
    def sortString(self, s: str) -> str:
        c = collections.Counter(s)
        keys, ans, flag = sorted(c.keys()), "", True
        while flag:
            flag = False
            for k in keys:
                if c[k] > 0:
                    ans += k
                    c[k] -= 1
                if c[k] > 0:    
                    flag = True
            keys = keys[::-1]
        return ans  

1576

题目描述:
给你一个仅包含小写英文字母和 ‘?’ 字符的字符串 s,请你将所有的 ‘?’ 转换为若干小写字母,使最终的字符串不包含任何 连续重复 的字符。
注意:你 不能 修改非 ‘?’ 字符。
题目测试用例保证 除 ‘?’ 字符 之外,不存在连续重复的字符。
在完成所有转换(可能无需转换)后返回最终的字符串。如果有多个解决方案,请返回其中任何一个。可以证明,在给定的约束条件下,答案总是存在的。

示例:
在这里插入图片描述
解答:

class Solution:
    def modifyString(self, s: str) -> str:
        y="abcdefghijklmnopqrstuvwxyz"
        for i in s:
            if i in y:
                y=y.replace(i,'')
        h=0
        s_list=list(s)
        y_list=list(y)
        for i in range(len(s_list)):
            if s_list[i]=="?":
                s_list[i]=y_list[h]
                h+=1
            if h+1==len(y_list):
                h=0
        return ''.join(s_list)

猜你喜欢

转载自blog.csdn.net/yeqing1997/article/details/113822293