leetcode 322. Coin Change

本文探讨了硬币找零问题的动态规划解决方案,通过具体的代码实现展示了如何计算组成特定金额所需的最少硬币数量。

322Coin Change

You are given coins of different denominations and a total amount of money amount. Write a function to compute the fewest number of coins that you need to make up that amount. If that amount of money cannot be made up by any combination of the coins, return -1.

Example 1:
coins = [1, 2, 5], amount = 11
return 3 (11 = 5 + 5 + 1)

Example 2:
coins = [2], amount = 3
return -1.

Note:
You may assume that you have an infinite number of each kind of coin.


1.一看是动态规划就知道是这种做法。


class Solution {
public:
    int coinChange(vector<int>& coins, int amount)
    {
        vector<int> ret(amount + 1, -1);
        ret[0] = 0;
        for (int i = 1; i <= amount; i++)
        {
            for (int j = 0; j < coins.size(); j++)
            {
                if (coins[j] > i) continue;
                else if (coins[j] == i)
                {
                    ret[i] = 1;
                    break;
                }
                else    //该硬币比当前值小
                {
                    if (ret[i - coins[j]] != -1)
                    {
                        if (ret[i] == -1)
                            ret[i] = ret[i - coins[j]] + 1;
                        else
                            ret[i] = min(ret[i], ret[i - coins[j]] + 1);
                    }
                }
            }
        }
        return ret[amount];
    }
};



(Mathcad+Simulink仿真)基于扩展描述函数法的LLC谐振变换器小信号分析设计内容概要:本文围绕“基于扩展描述函数法的LLC谐振变换器小信号分析设计”展开,结合Mathcad与Simulink仿真工具,系统研究LLC谐振变换器的小信号建模方法。重点利用扩展描述函数法(Extended Describing Function Method, EDF)对LLC变换器在非线性工作条件下的动态特性进行线性化近似,建立适用于频域分析的小信号模型,并通过Simulink仿真验证模型准确性。文中详细阐述了建模理论推导过程,包括谐振腔参数计算、开关网络等效处理、工作模态分析及频响特性提取,最后通过仿真对比验证了该方法在稳定性分析与控制器设计中的有效性。; 适合人群:具备电力电子、自动控制理论基础,熟悉Matlab/Simulink和Mathcad工具,从事开关电源、DC-DC变换器或新能源变换系统研究的研究生、科研人员及工程技术人员。; 使用场景及目标:①掌握LLC谐振变换器的小信号建模难点与解决方案;②学习扩展描述函数法在非线性系统线性化中的应用;③实现高频LLC变换器的环路补偿与稳定性设计;④结合Mathcad进行公式推导与参数计算,利用Simulink完成动态仿真验证。; 阅读建议:建议读者结合Mathcad中的数学推导与Simulink仿真模型同步学习,重点关注EDF法的假设条件与适用范围,动手复现建模步骤和频域分析过程,以深入理解LLC变换器的小信号行为及其在实际控制系统设计中的应用。
在准备 LeetCode 面试题时,一些高频题目和经典题型是必须掌握的,这些题目覆盖了数组、字符串、链表、树、动态规划等多个方面。以下是一些常见的 LeetCode 面试题: ### 数组与双指针类问题 - **LeetCode 160. Intersection of Two Linked Lists**:判断两个链表是否相交,并找到交点。 - **LeetCode 141. Linked List Cycle**:判断链表中是否存在环。 - **LeetCode 92. Reverse Linked List II**:反转链表的指定部分。 - **LeetCode 328. Odd Even Linked List**:将链表中的奇偶节点分开并连接到一起。 - **LeetCode 面试题 16.06. 最小差**:找到两个数组中差值最小的两个数,常用双指针法解决[^4]。 ### 字符串与哈希类问题 - **LeetCode 242. Valid Anagram**:判断两个字符串是否是变位词,通常使用哈希表或数组统计字符频率来解决[^2]。 - **LeetCode 1. Two Sum**:在数组中找出两个数使其和等于目标值,常用哈希表存储差值。 - **LeetCode 49. Group Anagrams**:将变位词分组,常用于哈希表处理字符串特征。 ### 链表类问题 - **LeetCode 2. Add Two Numbers**:两个链表表示的数字相加,需要考虑进位问题。 - **LeetCode 21. Merge Two Sorted Lists**:合并两个有序链表。 - **LeetCode 234. Palindrome Linked List**:判断链表是否是回文结构,可以使用快慢指针和反转链表结合的方法[^1]。 ### 树与图类问题 - **LeetCode 104. Maximum Depth of Binary Tree**:计算二叉树的最大深度。 - **LeetCode 102. Binary Tree Level Order Traversal**:二叉树的层序遍历。 - **LeetCode 236. Lowest Common Ancestor of a Binary Tree**:找到二叉树的最近公共祖先。 ### 排列组合与回溯类问题 - **LeetCode 面试题 08.08. 有重复字符串的排列组合**:给出有重复字符串的所有排列组合,通常使用回溯法实现[^5]。 - **LeetCode 46. Permutations**:生成不重复数字的所有排列。 - **LeetCode 78. Subsets**:生成一个数组的所有子集。 ### 动态规划类问题 - **LeetCode 70. Climbing Stairs**:爬楼梯问题,动态规划入门题。 - **LeetCode 198. House Robber**:打家劫舍问题,典型的线性动态规划。 - **LeetCode 322. Coin Change**:找零钱的最小硬币数,典型的完全背包问题。 ### 高频经典题 - **LeetCode 3. Longest Substring Without Repeating Characters**:无重复字符的最长子串,滑动窗口法的经典应用[^3]。 - **LeetCode 5. Longest Palindromic Substring**:最长回文子串,扩展中心法或动态规划解决。 - **LeetCode 8. String to Integer (atoi)**:字符串转换为整数,需考虑各种边界条件。 ### 代码示例 以下是一个判断两个字符串是否互为变位词的 Java 示例代码: ```java class Solution { public boolean isAnagram(String s, String t) { if (s.length() != t.length()) return false; int[] num = new int[26]; for (int i = 0; i < s.length(); i++) { num[s.charAt(i) - 'a']++; num[t.charAt(i) - 'a']--; } for (int i : num) { if (i != 0) return false; } return true; } } ``` ### 进阶建议 在准备 LeetCode 面试题时,不仅要掌握这些高频题目,还要理解其背后的数据结构和算法思想,例如快慢指针、双指针、滑动窗口、动态规划等。此外,代码实现要熟练,尤其是链表反转、字符串处理、数组操作等基础操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值