一条包含字母 A-Z 的消息通过以下映射进行了 编码 : 要 解码 已编码的消息,所有数字必须基于上述映射的方法,反向映射回字母(可能有多种方法)。例如,”11106″ 可以映射为: 注意,消息不能分组为 (1 11 06) ,因为 “06” 不能映射为 “F” ,这是由于 “6” 和 “06” 在映射中并不等价。 给你一个只含数字的 非空 字符串 s ,请计算并返回 解码 方法的 总数 。 题目数据保证答案肯定是一个 32 位 的整数。 示例 1: 示例 2: 示例 3: 提示: 解题: 超时了,看了答案才知道方向错了。。 官方解答: 1.动态规划 注意到在状态转移方程中,f(i)的值仅与f(i-1)和f(i-2)有关,因此我们可以使用三个变量进行状态转移,省区数组的空间。 最后验证了一下,超时的那个在本地和官方解法的答案是一致的
算法
LeetCode 90 子集 II
给你一个整数数组 nums ,其中可能包含重复元素,请你返回该数组所有可能的子集(幂集)。 解集 不能 包含重复的子集。返回的解集中,子集可以按 任意顺序 排列。 示例 1: 示例 2: 提示: 解题: 官方解答: 1.迭代法实现子集枚举 2.递归法实现子集枚举
LeetCode 89 格雷编码
n 位格雷码序列 是一个由 2^n 个整数组成的序列,其中: 给你一个整数 n ,返回任一有效的 n 位格雷码序列 。 示例 1: 示例 2: 提示: 解题: 官方解答: 1.归纳法 2.公式法 代码居然这么简单。。。 不行,得找个理由,二进制是我的盲区啊,这个理由不错^_^
LeetCode 88 合并两个有序数组
给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2,另有两个整数 m 和 n ,分别表示 nums1 和 nums2 中的元素数目。 请你 合并 nums2 到 nums1 中,使合并后的数组同样按 非递减顺序 排列。 注意:最终,合并后数组不应由函数返回,而是存储在数组 nums1 中。为了应对这种情况,nums1 的初始长度为 m + n,其中前 m 个元素表示应合并的元素,后 n 个元素为 0 ,应忽略。nums2 的长度为 n 。 示例 1: 示例 2: 示例 3: 提示: 进阶:你可以设计实现一个时间复杂度为 O(m + n) 的算法解决此问题吗? 解题: 官方解答: 1.直接合并后排序 2.双指针 3.逆向双指针
LeetCode 87 扰乱字符串
使用下面描述的算法可以扰乱字符串 s 得到字符串 t : 给你两个 长度相等 的字符串 s1 和 s2,判断 s2 是否是 s1 的扰乱字符串。如果是,返回 true ;否则,返回 false 。 示例 1: 示例 2: 示例 3: 提示: 解答: 官方解答: 1.动态规划
LeetCode 86 分隔链表
给你一个链表的头节点 head 和一个特定值 x ,请你对链表进行分隔,使得所有 小于 x 的节点都出现在 大于或等于 x 的节点之前。 你应当 保留 两个分区中每个节点的初始相对位置。 示例 1: 示例 2: 提示: 解题: 官方解答: 1.模拟
LeetCode 85 最大矩形
给定一个仅包含 0 和 1 、大小为 rows x cols 的二维二进制矩阵,找出只包含 1 的最大矩形,并返回其面积。 示例 1: 示例 2: 示例 3: 示例 4: 示例 5: 提示: 解题: 官方解答: 1.使用柱状图的优化暴力方法 2.单调栈
LeetCode 84 柱状图中最大的矩形
给定 n 个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1 。 求在该柱状图中,能够勾勒出来的矩形的最大面积。 示例 1: 示例 2: 提示: 解题: 超时了。。。 官方解答: 1.单调栈 2.单调栈+常数优化