摘要:
题目描述 给定一个二维网格和一个单词,找出该单词是否存在于网格中。 单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中 “相邻” 单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。 示例: 解题思路 回溯法 首先,需要一个辅助方法 其中 和`String word` 阅读全文
摘要:
题目描述 给定一组 不含重复元素 的整数数组 nums ,返回该数组所有可能的子集(幂集)。 说明: 解集不能包含重复的子集。 示例: 解题思路 回溯法 设置一个头指针 和一个当前列表 ,每次(递归地)进入回溯方法时,先将当前列表 加入结果列表,再对数组从头指针 到尾部进行遍历,每次遍历都分三步: 阅读全文
摘要:
题目描述 给定一个 没有重复 数字的序列,返回其所有可能的全排列。 示例: 解题思路 回溯法 设置一个指针 表示当前正在处理的元素, 表示数组 的长度。 如果 表示此时的全排列已经完成,把此时的列表加入到结果列表 对数组从索引 到`n 1`进行遍历 将 与`nums[i]`进行交换 继续(递归地)进 阅读全文
摘要:
22 生成括号 题目描述 给出 n 代表生成括号的对数,请你写出一个函数,使其能够生成所有可能的并且 有效的 括号组合。 例如,给出 n = 3,生成结果为: 解题思路 暴力破解法 生成所有 2^{2n} 个 和 字符构成的序列。然后,我们将检查每一个是否有效。 为了检查序列是否为有效的,我们会跟踪 阅读全文
摘要:
题目描述 给定一个仅包含数字 的字符串,返回所有它能表示的字母组合。 给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。 示例: 说明: 尽管上面的答案是按字典序排列的,但是你可以任意选择答案输出的顺序。 解题思路 回溯法 首先用一个数组把每个数字按键对应的字母存储起来,再把给定 阅读全文
摘要:
题目描述 给定一个由 (陆地)和 (水)组成的的二维网格,计算岛屿的数量。一个岛被水包围,并且它是通过水平方向或垂直方向上相邻的陆地连接而成的。你可以假设网格的四个边均被水包围。 示例 1: 示例 2: 解题思路 找到一个值为 的点(岛屿),把该点地值置为 ,在它的周围(上下左右)继续(递归地)找值 阅读全文
摘要:
题目描述 给定一个二叉搜索树,编写一个函数 来查找其中第 k 个最小的元素。 说明: 你可以假设 k 总是有效的,1 ≤ k ≤ 二叉搜索树元素个数。 示例 1: 示例 2: 进阶: 如果二叉搜索树经常被修改(插入/删除操作)并且你需要频繁地查找第 k 小的值,你将如何优化 函数? 解题思路 二叉搜 阅读全文
摘要:
题目描述 给定一个二叉树 填充它的每个 next 指针,让这个指针指向其下一个右侧节点。如果找不到下一个右侧节点,则将 next 指针设置为 。 初始状态下,所有 next 指针都被设置为 。 说明: 你只能使用额外常数空间。 使用递归解题也符合要求,本题中递归程序占用的栈空间不算做额外的空间复杂度 阅读全文
摘要:
题目描述 根据一棵树的前序遍历与中序遍历构造二叉树。 注意: 你可以假设树中没有重复的元素。 例如,给出 返回如下的二叉树: 解题思路 首先列举一下二叉树的三种常见遍历方式: 前序遍历:根 左 右 中序遍历:左 根 右 后序遍历:左 右 根 可以发现,「前中后」是指根节点在三个节点中的相对顺序。 根 阅读全文
摘要:
题目描述 给定一个二叉树,返回其节点值的锯齿形层次遍历。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。 例如: 给定二叉树 , 返回锯齿形层次遍历如下: 解题思路 考虑到题目需要用折线得方式遍历,就是说在遍历的过程中需要有反向操作,可以联想到使用栈来实现。 双栈法 1. 阅读全文