动态规划
文章平均质量分 57
promise_yaner
这个作者很懒,什么都没留下…
展开
-
【剑指Offer】46. 把数字翻译成字符串
题目链接:把数字翻译成字符串题目描述:给定一个数字,我们按照如下规则把它翻译为字符串:0 翻译成 “a” ,1 翻译成 “b”,……,11 翻译成 “l”,……,25 翻译成 “z”。一个数字可能有多个翻译。请编程实现一个函数,用来计算一个数字有多少种不同的翻译方法。题目分析:1)每一位上的数字都可以单独翻译成一个字符,且该位和其前一位的构成的数字小于26时,也可以一起翻译成一个字符。2)动态规划,用dp[n]表示一个n位的数字能够翻译成的字符串的个数,那么将包含n位的数字转换成一个字符原创 2022-04-20 17:42:14 · 467 阅读 · 0 评论 -
【Leetcode】63. 不同路径 II
题目链接:不同路径II题目描述:一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish”)。现在考虑网格中有障碍物。那么从左上角到右下角将会有多少条不同的路径?网格中的障碍物和空位置分别用 1 和 0 来表示。分析:这个题目本来是用回溯写的,但是超时了。无奈之下,看了一眼题解,原来是DP!!!dp[i][j]表示从起点(0,0)到点(i,j)的路径原创 2022-04-06 20:03:15 · 202 阅读 · 0 评论 -
【51nod】--1009数字1的数量&&1042数字0-9的数量(数位dp)
看了一篇写的超级超级好的博客真的!厉害 1009 数字1的数量 基准时间限制:1 秒 空间限制:131072 KB 分值: 5 难度:1级算法题 收藏 关注 给定一个十进制正整数N,写下从1开始,到N的所有正数,计算出其中出现所有1的个数。 例如:n = 12,包含了5个1。1,10,12共包含3个1,11包含2个1,总共5个1。 Input 输入N(1 <= N <= ...原创 2018-02-24 20:21:04 · 375 阅读 · 0 评论 -
【Leetcode】416. 分割等和子集
题目链接:分割等和子集题目描述:给你一个 只包含正整数 的 非空 数组 nums 。请你判断是否可以将这个数组分割成两个子集,使得两个子集的元素和相等。思路:将数组分割成两个等和的子集。那么:1)数组元素的和肯定得是偶数,并且数组长度必须大于1。2)问题转换为:数组中是否存在若干个元素,其和为数组所有元素和的一半。即寻找若干元素的和为target。本来的思路是:将元素排序,然后使用回溯的方法,通过了100多个样例。剩下几个样例错误,经过反复思考和尝试发现回溯的方法并不对。于是看了原创 2022-02-23 20:39:53 · 686 阅读 · 0 评论 -
【Leetcode】221. 最大正方形
题目链接:最大正方形题目描述:在一个由 '0' 和 '1' 组成的二维矩阵内,找到只包含 '1' 的最大正方形,并返回其面积。方法一:暴力解法求只包含1的面积最大的正方形。1)对矩阵的每一个点进行遍历,值为“1”的单元格可能是正方形的左上角。2)对值为“1”的单元格周围一圈进行判断,即在保证构成的图形是正方形的前提下,判断右侧新增的一列和下放新增的一行是否全都为"1",如果是,那么就再往外扩张一圈;否则,扩张结束。得到以当前单元格为左上角的最大的正方形面积。时间复杂度为O(m原创 2022-02-22 20:44:48 · 519 阅读 · 0 评论 -
【LeetCode】494. 目标和
题目链接:目标和题目描述:给你一个整数数组 nums 和一个整数 target 。向数组中的每个整数前添加 '+' 或 '-' ,然后串联起所有整数,可以构造一个 表达式 :例如,nums = [2, 1] ,可以在 2 之前添加 '+' ,在 1 之前添加 '-' ,然后串联起来得到表达式 "+2-1" 。返回可以通过上述方法构造的、运算结果等于 target 的不同 表达式 的数目。分析:数组中的每一个数字都要用到,而且每一个数字都有两种情况,+或者-。方法一:回溯(递归,df原创 2022-01-21 20:04:13 · 518 阅读 · 0 评论 -
【Leetcode】322. 零钱兑换
题目链接:零钱兑换题目描述:给你一个整数数组 coins ,表示不同面额的硬币;以及一个整数 amount ,表示总金额。计算并返回可以凑成总金额所需的 最少的硬币个数 。如果没有任何一种硬币组合能组成总金额,返回-1 。你可以认为每种硬币的数量是无限的。思路:这道题的思路和“完全平方数”那道题的思路是一致的,只是需要注意更多限制条件。方法一:动态规划dp[j]表示最少多少枚硬币能够组成总金额为j。状态转移方程为dp[j]=min (dp[j-i]) +1,其中i<=.原创 2021-12-21 16:29:45 · 152 阅读 · 0 评论 -
【Leetcode】300. 最长递增子序列
题目链接:LIS题目描述:给你一个整数数组 nums ,找到其中最长严格递增子序列的长度。子序列是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如,[3,6,2,7] 是数组 [0,3,1,6,2,2,7] 的子序列。思路有二:1、简单动态规划 O(n^2)dp[i]表示以nums[i]结尾的LIS的长度,必须包含nums[i]。那么状态转移方程就是dp[i]=max(dp[j])+1 (nums[i]>nums[j],0<=j&l..原创 2021-12-20 17:13:13 · 327 阅读 · 0 评论 -
【Leetcode】279. 完全平方数
题目链接:279. Perfect Squares题目描述:给定正整数n,找到若干个完全平方数(比如1, 4, 9, 16, ...)使得它们的和等于 n。你需要让组成和的完全平方数的个数最少。给你一个整数 n ,返回和为 n 的完全平方数的 最少数量 。完全平方数 是一个整数,其值等于另一个整数的平方;换句话说,其值等于一个整数自乘的积。例如,1、4、9 和 16 都是完全平方数,而 3 和 11 不是。1)方法一:动态规划分析:对于一个数i,用dp[i]表示最少需要多少个数的..原创 2021-12-16 16:29:33 · 382 阅读 · 0 评论 -
【LeetCode】198. House Robber[Medium]
题目链接:打家劫舍题目描述:一个非负整数数组,相邻的两个数不能相加,求最大的和是多少。思路:一、最开始分析找规律找到的情况是,因为相邻的数不能相加,所以第i个数只能在之后加上第i+2或第i+3个数。哪个大加哪个。所以,到第i个数的和,只跟第i-2和第i-3个数有关。即sum[i]=Max(sum[i-2],sum[i-3])+nums[i]。时间O(n),空间O(1)JavaScript代码如下:var rob = function(nums) { const len=原创 2021-11-15 20:24:33 · 145 阅读 · 0 评论 -
【51nod】--1092 回文字符串 (字符串LCS)
题目链接题目 LCS 修改 隐藏话题 1092 回文字符串 基准时间限制:1 秒 空间限制:131072 KB 分值: 10 难度:2级算法题 收藏 关注 回文串是指aba、abba、cccbccc、aaaa这种左右对称的字符串。每个字符串都可以通过向中间添加一些字符,使之变为回文字符串。 例如:abbc 添加2个字符可以变为 acbbca,也可以添加3个变为 abbcbba。方案1只...原创 2018-02-25 12:11:13 · 363 阅读 · 0 评论 -
【51nod】---1006 最长公共子序列Lcs(动态规划&&字符串LCS)
题目链接这里呀 1006 最长公共子序列Lcs 基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题 收藏 关注 给出两个字符串A B,求A与B的最长公共子序列(子序列不要求是连续的)。 比如两个串为:abcicba abdkscabab是两个串的子序列,abc也是,abca也是,其中abca是这两个字符串最长的子序列。 Input 第1行:字符串A...原创 2018-02-25 12:00:31 · 241 阅读 · 0 评论