leetcode 41-50(2024.08.19)

立个flag,1-100题每天分配10题,不会就先空着(4,10)。

1. 41:缺失的第一个正数

class Solution:
    def firstMissingPositive(self, nums: List[int]) -> int:
        n = len(nums)
        for i in range(n):
            if nums[i] <= 0 or nums[i] >= n:
                nums[i] = n
        for i in range(n):
            if 0 < abs(nums[i]) < n:
                if nums[nums[i]] > 0:
                    nums[nums[i]] = - nums[nums[i]]
        for i in range(n):
            if nums[i] > 0:
                break
        return i

2. 42:接雨水

class Solution:
    def trap(self, height: List[int]) -> int:
        max_left = 0
        max_right = 0
        left = []
        right = []
        res = 0
        for i in range(0, len(height) - 2, 1):
            if height[i] > max_left:
                max_left = height[i]
            left.append(max_left)
        for i in range(len(height) - 1, 1, -1):
            if height[i] > max_right:
                max_right = height[i]
            right.append(max_right)
        right = right[::-1]
        for i in range(1, len(height) - 1):
            if min(left[i-1], right[i-1]) > height[i]:
                res = res + min(left[i-1], right[i-1]) - height[i]
        return res

3. 43:字符串相乘

class Solution:
    def multiply(self, num1: str, num2: str) -> str:
        sum = 0
        leng1 = len(num1)
        for i in num1:
            leng2 = len(num2)
            for j in num2:
                sum = sum + int(i) * 10 ** (leng1 - 1) * int(j) * 10 ** (leng2 - 1)
                leng2 = leng2 - 1
            leng1 = leng1 - 1
        return str(sum)

4. 44:通配符匹配 

5. 45:跳跃游戏2

class Solution:
    def jump(self, nums: List[int]) -> int:
        res = 0
        distance = 0
        end = 0
        for i in range(len(nums) - 1):
            distance = max(distance, i + nums[i])
            if i == end:
                res = res + 1
                end = distance
        return res

6. 46:全排列

class Solution:
    def permute(self, nums: List[int]) -> List[List[int]]:
        def backtracking(nums, path, res):
            if len(path) == len(nums):
                res.append(path.copy())
                return
            for i in nums:
                if i in path:
                    continue
                path.append(i)
                backtracking(nums, path, res)
                path.pop()

        res = []
        path = []
        backtracking(nums, path, res)
        return res

7. 47:全排列2

class Solution:
    def permuteUnique(self, nums: List[int]) -> List[List[int]]:
        def backtrack(nums, used, res, path):
            if len(path) == len(nums):
                res.append(path.copy())
                return
            for i in range(len(nums)):
                if used[i]:
                    continue
                if i > 0 and nums[i] == nums[i - 1] and not used[i - 1]:
                    continue
                used[i] = 1
                path.append(nums[i])
                backtrack(nums, used, res, path)
                used[i] = 0
                path.pop()
        res = []
        path = []
        used = [0] * len(nums)
        nums.sort()
        backtrack(nums, used, res, path)
        return res

8. 48:旋转图像

class Solution:
    def rotate(self, matrix: List[List[int]]) -> None:
        """
        Do not return anything, modify matrix in-place instead.
        """
        n = len(matrix)
        for i in range(n // 2):
            for j in range((n + 1) // 2):
                temp = matrix[i][j]
                matrix[i][j] = matrix[n - 1 - j][i]
                matrix[n - 1 - j][i] = matrix[n - 1 - i][n - 1 - j]
                matrix[n - 1 - i][n - 1 - j] = matrix[j][n - 1 - i]
                matrix[j][n - 1 - i] = temp

9. 49:字母异位词分组

class Solution:
    def groupAnagrams(self, strs: List[str]) -> List[List[str]]:
        res = []
        haxi = {}
        for i in strs:
            sort_i = "".join(sorted(i))
            if sort_i in haxi:
                haxi[sort_i].append(i)
            else:
                haxi[sort_i] = [i]

        for key in haxi:
            res.append(haxi[key])
        return res

10. 50:Pow(x, n)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值