279.完全平方数给你一个整数n,返回和为n的完全平方数的最少数量。完全平方数是一个整数,其值等于另一个整数的平方;换句话说,其值等于一个整数自乘的积。例如,1、4、9和16都是完全平方数,而3和11不是。示例1:输入:n=12输出:3解释:12=4+4+4示例2:输入:n=13输出:2解释:13=4+9提示:11n104这道题采用动态规划进行求解,不能用贪心去做,否则结果是错误的,反例就是示例1,如果用贪心,12=9+1+1+1,需要4个数。另外一种方法是利用了一个数学定理(四平方和定理),见https://leetcode.cn/problems/perfect-squares/solut
46.携带研究材料(第六期模拟笔试)题目描述小明是一位科学家,他需要参加一场重要的国际科学大会,以展示自己的最新研究成果。他需要带一些研究材料,但是他的行李箱空间有限。这些研究材料包括实验设备、文献资料和实验样本等等,它们各自占据不同的空间,并且具有不同的价值。小明的行李空间为N,问小明应该如何抉择,才能携带最大价值的研究材料,每种研究材料只能选择一次,并且只有选与不选两种选择,不能进行切割。输入描述第一行包含两个正整数,第一个整数M代表研究材料的种类,第二个正整数N,代表小明的行李空间。第二行包含M个正整数,代表每种研究材料的所占空间。第三行包含M个正整数,代表每种研究材料的价值。输出描述输
层序遍历理论讲解LeetCode226.翻转二叉树文章讲解:代码随想录(programmercarl.com)视频讲解:听说一位巨佬面Google被拒了,因为没写出翻转二叉树|LeetCode:226.翻转二叉树_哔哩哔哩_bilibili思路关键在于遍历顺序,只要把每一个节点的左右孩子翻转一下,就可以达到整体翻转的效果。这道题目使用前序遍历和后序遍历都可以。代码如下: LeetCode101.对称二叉树文章讲解:代码随想录(programmercarl.com)视频讲解:同时操作两个二叉树|LeetCode:101.对称二叉树_哔哩哔哩_bilibili思路本题遍历只能是“后序遍
17.电话号码的字母组合题目给定一个仅包含数字2-9的字符串,返回所有它能表示的字母组合。答案可以按任意顺序返回。给出数字到字母的映射如下(与电话按键相同)。注意1不对应任何字母。 题目链接 .-力扣(LeetCode)文字和画图分析这道题明显是需要互相匹配,如字符串“23”,对应“abc”和“def”。这个时候我们就想到跟循环有关,但是我们很难控制出for循环的个数,所以最好的办法就是采用递归参数我们需要:digits(含2-9的字符串),di(表示层数),tmp(每一层对应的字符串),t(接收每一次递归结束时的字符串)注意事项:tmp不要传引用,便于递归结束时可以对应到上一层的字符串t需
动态规划(DynamicProgramming,DP)是解决复杂问题的一个强大工具,它将问题分解成更小的子问题,并使用这些子问题的解决方案来构建整体问题的解决方案。在深入探讨最短编辑距离问题之前,让我们先理解什么是动态规划,以及如何通过动态规划的视角来看待这个问题。原题链接:72.编辑距离-力扣(LeetCode)动态规划分析动态规划的核心动态规划通常用于求解最优化问题。其核心思想包括两个主要部分:最优子结构:问题的最优解包含其子问题的最优解。这意味着我们可以通过合并子问题的最优解来构造整个问题的最优解。重叠子问题:在解决问题的过程中,问题被分解成若干个子问题,其中很多子问题是重复的。最短编辑
算法沉淀——动态规划之其它背包问题与卡特兰数二维费用的背包问题01.一和零02.盈利计划似包非包组合总和Ⅳ卡特兰数不同的二叉搜索树二维费用的背包问题01.一和零题目链接:https://leetcode.cn/problems/ones-and-zeroes/给你一个二进制字符串数组strs和两个整数m和n。请你找出并返回strs的最大子集的长度,该子集中最多有m个0和n个1。如果x的所有元素也是y的元素,集合x是集合y的子集。示例1:输入:strs=["10","0001","111001","1","0"],m=5,n=3输出:4解释:最多有5个0和3个1的最大子集是{"10","0001
文章目录Day3700.动态规划理论基础01.斐波那契数(No.509)题目笔记代码02.爬楼梯(No.70)题目笔记代码03.使用最小花费爬楼梯(No.746)题目笔记代码Day3700.动态规划理论基础最常见的动态规划题目其实就是求最值,比如说股票问题、背包问题,都是在求使用怎样的策略能使得整个系统达到一个最优化的状态。这是否和贪心比较类似呢?其实贪心算法和动态规划算法的区别还是比较大的,贪心算法每一次的最优解一定包含上一次的最优解,是局部的最优推出全局的最优,而动态规划的最优解不一定包含前一次的最优解,而是有可能是由更前面的部分推出的,所以通常通过dp[]数组来将前面的所有最优解来保存下
动态规划之解码方法91.解码方法解法1解法291.解码方法91.解码方法解法1状态表示(这是最重要的):dp[i]表示以第i个字符为结尾,解码方法的总数。状态转移方程(最难的):根据最近的一步来划分问题,从右向左思考,我们需要考虑s[i]和s[i-1]是单独为一个字符形成两个数字,还是合并为一个字符形成为一个数字。 如果s[i]和s[i-1]是单独为一个字符形成两个数字,那么dp[i]的值就是dp[i-1]的值; 如果s[i]和s[i-1]合并为一个字符形成为一个数字,那么dp[i]的值就是dp[i-2]的值。因为s[i]和s[i-1]都形成一个数字了,再dp[i]往前就是就是dp[i-2
算法沉淀——动态规划之01背包问题01.【模板】01背包02.分割等和子集03.目标和04.最后一块石头的重量II01背包问题是一类经典的动态规划问题,通常描述为:有一个固定容量的背包,以及一组物品,每件物品都有重量和价值,目标是找到在背包容量范围内,使得背包中的物品总价值最大的组合。具体来说,问题的输入包括:一个固定容量的背包(通常表示为一个整数W)。一组物品,每个物品有两个属性:重量(通常表示为一个整数weight)和价值(通常表示为一个整数value)。求解的目标是找到一种放置物品的方式,使得放入背包的物品的总重量不超过背包容量,并且总价值最大。这个问题的特点是,对于每件物品,你只能选择
博主主页:17_Kevin-CSDN博客收录专栏:《Leetcode》题目解决思路思路一:翻转链表structListNode*reverseList(structListNode*head){if(head==NULL){returnNULL;}structListNode*n1=NULL,*n2=head,*n3=n2->next;while(n2!=NULL){n2->next=n1;n1=n2;n2=n3;if(n3!=NULL){n3=n2->next;}}returnn1;}我们定义三个节点的指针n1,n2,n3.分别指向NULL,head,head->next。这样我们通过三个指