• 被围绕的区域


    题目描述

    给定一个二维的矩阵,包含 ‘X’ 和 ‘O’(字母 O)。找到所有被 ‘X’ 围绕的区域,并将这些区域里所有的 ‘O’ 用 ‘X’ 填充。

    示例:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    输入:

    X X X X
    X O O X
    X X O X
    X O X X

    运行你的函数后,矩阵变为:

    X X X X
    X X X X
    X X X X
    X O X X

    解释: 被围绕的区间不会存在于边界上,换句话说,任何边界上的 ‘O’ 都不会被填充为 ‘X’。 任何不在边界上,或不与边界上的 ‘O’ 相连的 ‘O’ 最终都会被填充为 ‘X’。如果两个元素在水平或垂直方向相邻,则称它们是“相连”的。

  • 计数二进制子串


    题目描述

    给定一个字符串 s,计算具有相同数量0和1的非空(连续)子字符串的数量,并且这些子字符串中的所有0和所有1都是组合在一起的。重复出现的子串要计算它们出现的次数。

    示例 1:

    输入: “00110011”
    输出: 6
    解释: 有 6 个子串具有相同数量的连续1和0:“0011”,“01”,“1100”,“10”,“0011” 和 “01”。
    请注意,一些重复出现的子串要计算它们出现的次数。
    另外,“00110011”不是有效的子串,因为所有的0(和1)没有组合在一起。

    示例 2:

    输入: “10101”
    输出: 4
    解释: 有4个子串:“10”,“01”,“10”,“01”,它们具有相同数量的连续1和0。

    注意:

    s.length 在1到50,000之间。
    s 只包含“0”或“1”字符。

  • Hexo 博客和 NexT 主题版本升级


    前言

    使用 Hexo 搭建博客也有4年之久,也是一直使用 NexT 主题,NexT 的简洁大方美观,特别符合我的审美。最近 Hexo 更新到 5.0.0 版本了,也是临时起意,想要更新下 Hexo 的版本,同时也一起更新下 NexT 主题,毕竟从4年前开始使用后,就再也没有升级过这两个的版本了。经常看到很多的同学都升级到新版本的 NexT 主题,界面展示和功能都有较大提升。NexT 主题不仅由之前的 5.1.x 更新至 7.x,主仓库也从 iissnan 名下迁移至 theme-next 组织。

  • 相同的树


    题目描述

    给定两个二叉树,编写一个函数来检验它们是否相同。如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。

    示例 1:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    输入:

    1 1
    / \ / \
    2 3 2 3

    [1, 2, 3], [1, 2, 3]

    输出: true

    示例 2:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    输入:

    1 1
    / \
    2 2

    [1, 2], [1, null, 2]

    输出: false

    示例 3:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    输入:

    1 1
    / \ / \
    2 1 1 2

    [1, 2, 1], [1, 1, 2]

    输出: false
  • 课程表


    题目描述

    你这个学期必须选修 numCourse 门课程,记为 0 到 numCourse - 1 。在选修某些课程之前需要一些先修课程。 例如,想要学习课程 0 ,你需要先完成课程 1 ,我们用一个匹配来表示他们:[0, 1]。给定课程总量以及它们的先决条件,请你判断是否可能完成所有课程的学习?

    示例 1:

    输入: 2, [[1, 0]]
    输出: true
    解释: 总共有 2 门课程。学习课程 1 之前,你需要完成课程 0。所以这是可能的。

    示例 2:

    输入: 2, [[1, 0], [0, 1]]
    输出: false
    解释: 总共有 2 门课程。学习课程 1 之前,你需要先完成​课程 0;并且学习课程 0 之前,你还应先完成课程 1。这是不可能的。

  • 魔术索引


    题目描述

    魔术索引。 在数组 A[0…n-1] 中,有所谓的魔术索引,满足条件 A[i] = i 。给定一个有序整数数组,编写一种方法找出魔术索引,若有的话,在数组 A 中找出一个魔术索引,如果没有,则返回 -1。若有多个魔术索引,返回索引值最小的一个。

    示例1:

    输入: nums = [0, 2, 3, 4, 5]
    输出: 0
    说明: 0 下标的元素为 0

    示例2:

    输入: nums = [1, 1, 1]
    输出: 1

    说明:

    nums 长度在 [1, 1000000] 之间

  • 字符串相加


    题目描述

    给定两个字符串形式的非负整数 num1 和 num2 ,计算它们的和。

    提示:

    • num1 和 num2 的长度都小于 5100
    • num1 和 num2 都只包含数字 0-9
    • num1 和 num2 都不包含任何前导零
    • 你不能使用任何內建 BigInteger 库,也不能直接将输入的字符串转换为整数形式
  • 黄金矿工


    题目描述

    你要开发一座金矿,地质勘测学家已经探明了这座金矿中的资源分布,并用大小为 m * n 的网格 grid 进行了标注。每个单元格中的整数就表示这一单元格中的黄金数量;如果该单元格是空的,那么就是 0。为了使收益最大化,矿工需要按以下规则来开采黄金:

    • 每当矿工进入一个单元,就会收集该单元格中的所有黄金。
    • 矿工每次可以从当前位置向上下左右四个方向走。
    • 每个单元格只能被开采(进入)一次。
    • 不得开采(进入)黄金数目为 0 的单元格。
    • 矿工可以从网格中任意一个有黄金的单元格出发或者是停止。

    示例 1:

    1
    2
    3
    4
    5
    6
    7
    输入:grid = [[0, 6, 0], [5, 8, 7], [0, 9, 0]]
    输出:24
    解释:
    [[0, 6, 0],
    [5, 8, 7],
    [0, 9, 0]]
    一种收集最多黄金的路线是:9 -> 8 -> 7。

    示例 2:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    输入:grid = [[1, 0, 7], [2, 0, 6], [3, 4, 5], [0, 3, 0], [9, 0, 20]]
    输出:28
    解释:
    [[1, 0, 7],
    [2, 0, 6],
    [3, 4, 5],
    [0, 3, 0],
    [9, 0, 20]]
    一种收集最多黄金的路线是:1 -> 2 -> 3 -> 4 -> 5 -> 6 -> 7。

    提示:

    • 1 <= grid.length, grid[i].length <= 15
    • 0 <= grid[i][j] <= 100
    • 最多 25 个单元格中有黄金。
  • 扫雷游戏


    題目描述

    让我们一起来玩扫雷游戏!

    给定一个代表游戏板的二维字符矩阵。 ‘M’ 代表一个未挖出的地雷,’E’ 代表一个未挖出的空方块,’B’ 代表没有相邻(上,下,左,右,和所有4个对角线)地雷的已挖出的空白方块,数字(’1’ 到 ‘8’)表示有多少地雷与这块已挖出的方块相邻,’X’ 则表示一个已挖出的地雷。现在给出在所有未挖出的方块中(’M’或者’E’)的下一个点击位置(行和列索引),根据以下规则,返回相应位置被点击后对应的面板:

    1. 如果一个地雷(’M’)被挖出,游戏就结束了- 把它改为 ‘X’。
    2. 如果一个没有相邻地雷的空方块(’E’)被挖出,修改它为(’B’),并且所有和其相邻的未挖出方块都应该被递归地揭露。
    3. 如果一个至少与一个地雷相邻的空方块(’E’)被挖出,修改它为数字(’1’到’8’),表示相邻地雷的数量。
    4. 如果在此次点击中,若无更多方块可被揭露,则返回面板。

    示例 1:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    输入:

    [['E', 'E', 'E', 'E', 'E'],
    ['E', 'E', 'M', 'E', 'E'],
    ['E', 'E', 'E', 'E', 'E'],
    ['E', 'E', 'E', 'E', 'E']]

    Click : [3,0]

    输出:

    [['B', '1', 'E', '1', 'B'],
    ['B', '1', 'M', '1', 'B'],
    ['B', '1', '1', '1', 'B'],
    ['B', 'B', 'B', 'B', 'B']]

    解释:

    示例 2:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    输入:

    [['B', '1', 'E', '1', 'B'],
    ['B', '1', 'M', '1', 'B'],
    ['B', '1', '1', '1', 'B'],
    ['B', 'B', 'B', 'B', 'B']]

    Click : [1,2]

    输出:

    [['B', '1', 'E', '1', 'B'],
    ['B', '1', 'X', '1', 'B'],
    ['B', '1', '1', '1', 'B'],
    ['B', 'B', 'B', 'B', 'B']]

    解释:

    注意:

    1. 输入矩阵的宽和高的范围为 [1, 50]。
    2. 点击的位置只能是未被挖出的方块 (‘M’ 或者 ‘E’),这也意味着面板至少包含一个可点击的方块。
    3. 输入面板不会是游戏结束的状态(即有地雷已被挖出)。
    4. 简单起见,未提及的规则在这个问题中可被忽略。例如,当游戏结束时你不需要挖出所有地雷,考虑所有你可能赢得游戏或标记方块的情况。
  • 二叉树的最大深度


    题目描述

    给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。

    说明: 叶子节点是指没有子节点的节点。

    示例:

    1
    2
    3
    4
    5
    6
    7
    8
    给定二叉树 [3, 9, 20, null, null, 15, 7],

    3
    / \
    9 20
    / \
    15 7
    返回它的最大深度 3 。