LeetCode(2023-10-12)


1405. 最长快乐字符串

1405. 最长快乐字符串

贪心

class Solution:
    def longestDiverseString(self, a: int, b: int, c: int) -> str:
        ans = []
        cnt = [[a, 'a'], [b, 'b'], [c, 'c']]
        while True:
            cnt.sort(key=lambda x: -x[0])
            for i in range(len(cnt)):
                if cnt[i][0] <= 0:
                    continue
                if len(ans) >= 2 and ans[-1] == cnt[i][1] and ans[-2] == cnt[i][1]:
                    continue
                ans.append(cnt[i][1])
                cnt[i][0] -= 1
                break
            else:
                break
        return ''.join(ans)

1985. 找出数组中的第 K 大整数

1985. 找出数组中的第 K 大整数

import heapq


class Solution:
    def kthLargestNumber(self, nums: List[str], k: int) -> str:
        x = heapq.nlargest(k, nums, key=int)
        return str(x[-1])

LCR 112. 矩阵中的最长递增路径

LCR 112. 矩阵中的最长递增路径

from functools import cache


class Solution:
    def __init__(self):
        self.m = None
        self.n = None
        self.matrix = None

    def longestIncreasingPath(self, matrix: List[List[int]]) -> int:
        self.m = len(matrix)
        self.n = len(matrix[0])
        self.matrix = matrix
        ans = 0
        for i in range(self.m):
            for j in range(self.n):
                tmp = self.dfs(i, j)
                if tmp > ans:
                    ans = tmp
        return ans

    @cache
    def dfs(self, x, y):
        ret_ans = 0
        ret_ans = max(
            max(self.dfs(x + 1, y), ret_ans) if (self.m > x + 1 >= 0 and self.matrix[x + 1][y] > self.matrix[x][y]) else 0,
            max(self.dfs(x - 1, y), ret_ans) if (self.m > x - 1 >= 0 and self.matrix[x - 1][y] > self.matrix[x][y]) else 0,
            max(self.dfs(x, y + 1), ret_ans) if (self.n > y + 1 >= 0 and self.matrix[x][y + 1] > self.matrix[x][y]) else 0,
            max(self.dfs(x, y - 1), ret_ans) if (self.n > y - 1 >= 0 and self.matrix[x][y - 1] > self.matrix[x][y]) else 0,
        )
        return ret_ans + 1

1424. 对角线遍历 II

1424. 对角线遍历 II

class Solution:
    def findDiagonalOrder(self, nums: List[List[int]]) -> List[int]:
        ans = []
        for i in range(len(nums)):
            for j in range(len(nums[i])):
                ans.append([i + j, j, nums[i][j]])
        ans.sort()
        return [ans[i][2] for i in range(len(ans))]

2562. 找出数组的串联值

2562. 找出数组的串联值

class Solution:
    def findTheArrayConcVal(self, nums: List[int]) -> int:
        p0 = 0
        p1 = len(nums) - 1
        ans = 0
        while p0 <= p1:
            if p0 != p1:
                ans += int(str(nums[p0]) + str(nums[p1]))
            else:
                ans += nums[p0]
            p0 += 1
            p1 -= 1
        return ans

声明:Hello World|版权所有,违者必究|如未注明,均为原创|本网站采用BY-NC-SA协议进行授权

转载:转载请注明原文链接 - LeetCode(2023-10-12)


我的朋友,理论是灰色的,而生活之树是常青的!