返回

LeetCode每日一题:326、200、230秒杀,33天完美通关!

前端

  1. 3的幂

题目

给定一个整数,写一个函数来判断它是否是3的幂。

解题思路

这道题目的本质是判断一个整数是否可以表示为3^n的形式,其中n为非负整数。我们可以使用以下步骤来解决这个问题:

  1. 特判: 如果给定的整数为0,则它不是3的幂。
  2. 循环判断: 不断地将给定的整数除以3,直到它不能再被3整除。
  3. 检查余数: 如果在循环过程中,给定的整数不能再被3整除,并且余数为0,则它是一个3的幂。否则,它不是3的幂。

代码实现

def isPowerOfThree(n):
    # 特判
    if n == 0:
        return False

    # 循环判断
    while n % 3 == 0:
        n //= 3

    # 检查余数
    return n == 1

200. 岛屿数量

题目

给定一个由01组成的二维网格,其中0表示水域,1表示陆地,找出网格中岛屿的数量。

解题思路

这道题目的本质是求解连通分量的个数。我们可以使用深度优先搜索(DFS)或广度优先搜索(BFS)来解决这个问题。这里,我们采用DFS的解法:

  1. 遍历网格: 逐行遍历网格,如果遇到1,则表示遇到了一个岛屿。
  2. 深度优先搜索: 从该1出发,向上下左右四个方向进行深度优先搜索,将与该1相连的所有1都标记为0
  3. 计数岛屿: 每当完成一次深度优先搜索,就将岛屿数量加1。

代码实现

def numIslands(grid):
    # 异常处理
    if not grid or not grid[0]:
        return 0

    # 行数和列数
    m, n = len(grid), len(grid[0])

    # 岛屿数量
    count = 0

    # 深度优先搜索
    def dfs(x, y):
        # 越界或为水域
        if x < 0 or x >= m or y < 0 or y >= n or grid[x][y] == 0:
            return

        # 标记为已访问
        grid[x][y] = 0

        # 向上下左右四个方向搜索
        dfs(x - 1, y)
        dfs(x + 1, y)
        dfs(x, y - 1)
        dfs(x, y + 1)

    # 遍历网格
    for i in range(m):
        for j in range(n):
            # 遇到岛屿
            if grid[i][j] == 1:
                # 深度优先搜索
                dfs(i, j)
                # 计数岛屿
                count += 1

    return count

230. 二叉搜索树中第K小的元素

题目描述

给定一个二叉搜索树,找出其中第k小的元素。

解题思路

这道题目的本质是求解二叉搜索树的中序遍历结果的第k个元素。我们可以使用中序遍历来解决这个问题:

  1. 中序遍历: 按照左-根-右的顺序遍历二叉搜索树,并将遍历到的元素存储在一个列表中。
  2. 获取第k个元素: 返回列表中第k个元素,即为二叉搜索树中第k小的元素。

代码实现

def kthSmallest(root, k):
    # 中序遍历
    stack = []
    while root or stack:
        # 遍历到最左边的叶子节点
        while root:
            stack.append(root)
            root = root.left

        # 弹出栈顶元素
        root = stack.pop()

        # 计数
        k -= 1
        if k == 0:
            return root.val

        # 遍历右子树
        root = root.right

总结

在本文中,我们详细地介绍了LeetCode上的326、200、230这三道题目,并给出了每道题目的详细解法和代码实现。通过这三道题目的学习,我们进一步巩固了对深度优先搜索、广度优先搜索和中序遍历等算法技巧的理解。希望大家能够熟练掌握这些算法技巧,在LeetCode的解题道路上取得更大的进步!