
动态规划
Wade_Gao
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
LeetCode-1018:可被 5 整除的二进制前缀
class Solution { public: vector<bool> prefixesDivBy5(vector<int>& A) { vector<bool> sln; unsigned int dp_2 = 0, dp_1 = 0; for(size_t i = 0; i < A.size(); i++){ dp_1 = dp_2 * 2 + A.at(i);原创 2020-06-17 22:27:13 · 155 阅读 · 0 评论 -
LeetCode-1048:最长字符串链
一、题目描述 二、解题思路 这个提示很重要,它限定了字符串的最大长度 题目里并没有说字符串的长度是递增的,有可能是乱序长度排列的,而我的一次错误提交也证实了这一猜想。 那么首先我们应该将字符串按照长度进行聚类,注意这里会用到1 <= words[i].length <= 16这个条件。可以建立起vector<vector<int>> LenDic(17) 然后,此题是动态规划类型的题目,那么如何进行动态规划呢? 确定dp数组,明确数组值的含义 dp[i]表示以wor原创 2020-05-16 00:07:01 · 241 阅读 · 0 评论 -
LeetCode-264:丑数 II
一、题目描述 二、解题思路 采用三指针法 丑数是因数只有2, 3, 5的数字,设置一个dp数组表示当前已经找到的有序丑数。那么这个序列分别乘以2, 3, 5之后得到的序列肯定还是丑数序列 首先第一个数字肯定是1,第二个也不难推出是2 但是怎么确定先后顺序:1得到2, 3, 5,2得到4, 6, 10。如果直接接在后面,可以看到不成顺序,违背了dp是已经找到的有序丑数这一设定,导致后面的工作无法进...原创 2020-04-29 23:03:27 · 210 阅读 · 0 评论 -
LeetCode-357:计算各个位数不同的数字个数
一、题目描述 二、解题思路 首先,定义一个数组dp并指明含义:dp[i]的值表示当数字最大为i位数时应该返回的结果,比如dp[2] = 91 其次,找出关系数组元素之间的迭代关系式 举个例子,要确定形如1234这样的四位数的答案,得到答案的过程又分出来两种情况 形如1234的四位数从形如123这样的三位数在最低位随便加上一位不重复的数字构成,即从典型三位数(是形如123而不是012的情况)...原创 2020-04-27 22:22:38 · 243 阅读 · 0 评论 -
LeetCode-63:不同路径II
一、题目描述 二、解题思路 进阶版的不同路径,dp来解答,很明显是二维动态规划 定义dp含义:定义dp[i][j]dp[i][j]dp[i][j]为走到坐标为(i,j)(i, j)(i,j)这一点的走法 定义边界条件 首行首列上没有障碍物的情况下,首行首列肯定都是1的了,因为只能有一种走法 但是,如果首行首列上有障碍物,那么最远只能走到障碍物的前面,包括障碍物所在的那一点及其后面的dp的值都...原创 2020-04-05 15:16:32 · 99 阅读 · 0 评论 -
LeetCode-338:比特位计数
一、题目描述 二、解题思路 暴力法:逐个对数字模2,得到1的个数,装入vector,时间复杂度为O(n×sizeof(int))O(n \times sizeof(int))O(n×sizeof(int)) 位运算法 >>法 对一个数字,用二进制表达,比如9可以表达为1001 左移1位,得到100,而100这个的结果我们在之前一定计算过,因为(n >> 1) <...原创 2020-04-05 13:18:05 · 135 阅读 · 0 评论 -
LeetCode-5:最长回文子串
一、题目描述 二、解题思路 首先,定义一个二维dp[len][len]布尔数组 dp[i][j]的值代表从s[i]到s[j]的这个子串是否为回文串 状态转移方程:dp[i][j] = dp[i + 1][j - 1] && s[i] == s[j]; 解释:如果一个串是回文串,那么掐头去尾,剩下的也是回文串,同时头尾元素一定相同,只有这样才会是回文串 三、解题代码 class...原创 2020-04-05 11:54:35 · 103 阅读 · 0 评论 -
LeetCode-91:解码方法
一、题目描述 二、解题方法 很明显地,需要使用动态规划来解决,我们需要注意以下几个边界条件: 设dp[i]dp[i]dp[i]为str[0]str[0]str[0]~str[i]str[i]str[i]的译码方法总数 建立最优子结构 s[i]==s[i] ==s[i]== ′0′'0'′0′:那么要求s[i−1]==s[i - 1] ==s[i−1]== ′1′'1'′1′ ororor ...原创 2020-04-03 12:35:34 · 223 阅读 · 0 评论 -
LeetCode-279:完全平方数
一、题目描述 给定正整数 n,找到若干个完全平方数(比如 1, 4, 9, 16, …)使得它们的和等于 n。你需要让组成和的完全平方数的个数最少。 示例 1: 输入: n = 12 输出: 3 解释: 12 = 4 + 4 + 4. 示例 2: 输入: n = 13 输出: 2 解释: 13 = 4 + 9. 二、解题思路 定义一个函数fff表达我们要求的题解;f(n)=1+min(f(n...原创 2020-04-02 15:32:59 · 120 阅读 · 0 评论 -
LeetCode-221:最大正方形
最大正方形 一、题目描述 在一个由 0 和 1 组成的二维矩阵内,找到只包含 1 的最大正方形,并返回其面积。 示例: 输入: 1 0 1 0 0 1 0 1 1 1 1 1 1 1 1 1 0 0 1 0 输出: 4 二、解题思路 还是动态规划,这里我们可以定义一个二维数组dp[][],dp[i][j]用来表示以坐标(i+1,j+1)(i+1,j+1)(i+1,j+1)为右下角的区...原创 2020-04-01 20:24:29 · 126 阅读 · 0 评论 -
LeetCode-62:最小路径和问题
LeetCode-62:最小路径和问题 一、题目描述: 给定一个包含非负整数的 m * n网格grid,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。 说明:每次只能向下或者向右移动一步。 示例: 输入: [ [1,3,1], [1,5,1], [4,2,1] ] 输出: 7 解释: 因为路径 1→3→1→1→1 的总和最小。 二、解题思路: 该题为典型的动态规划问题...原创 2020-04-01 18:18:55 · 352 阅读 · 1 评论