518. Coin Change 2

本文介绍了一种解决组合找零问题的有效算法。该算法利用动态规划思想,通过一个示例详细展示了如何计算不同面额硬币组成特定金额的方法数量。此外,还提供了一种递归方法来解决相同的问题。

You are given coins of different denominations and a total amount of money. Write a function to compute the number of combinations that make up that amount. You may assume that you have infinite number of each kind of coin.

Note: You can assume that

  • 0 <= amount <= 5000
  • 1 <= coin <= 5000
  • the number of coins is less than 500
  • the answer is guaranteed to fit into signed 32-bit integer

Example 1:

Input: amount = 5, coins = [1, 2, 5]
Output: 4
Explanation: there are four ways to make up the amount:
5=5
5=2+2+1
5=2+1+1+1
5=1+1+1+1+1

Example 2:

Input: amount = 3, coins = [2]
Output: 0
Explanation: the amount of 3 cannot be made up just with coins of 2.

Example 3:

Input: amount = 10, coins = [10] 
Output: 1
public class Solution {  
    public int change(int amount, int[] coins) {  
        if (coins == null || coins.length == 0) {  
            return amount == 0? 1: 0;  
        }  
        int[] dp = new int[amount + 1];  
        dp[0] = 1;  
        for (int i = 0; i < coins.length; i ++) {  
            for (int j = 1; j <= amount; j ++) {  
                if (j >= coins[i]) {  
                    dp[j] += dp[j - coins[i]];  
                }  
            }  
        }  
        return dp[amount];  
    }  
}
递归:
 public int change(int amount, int[] coins) {
        if (amount < 0 || coins == null ) {
            return 0;
        }
        return getNum(coins, coins.length - 1, amount);
    }

    public int getNum(int[] coins, int i, int remain) {
        if (remain <= 0 || i < 0) {
            if (remain == 0) {
                return 1;
            }
            return 0;
        }
        return getNum(coins, i - 1, remain) + getNum(coins, i, remain - coins[i]);
    }



### 关于 `prices.pct_change()` 函数的使用与错误排查 `pandas` 中的 `Series.pct_change()` 方法用于计算序列中相邻元素之间的百分比变化。它通过公式 `(current - previous) / previous` 来计算变化率。以下是关于该函数的基本用法和常见问题的详细说明。 #### 基本用法 `pct_change()` 方法可以接受一个参数 `periods`,表示计算百分比变化的时间间隔。默认情况下,`periods=1`,即计算当前值与前一个值之间的变化率[^1]。 ```python import pandas as pd # 示例数据 data = [10, 20, 30, 40, 50] series = pd.Series(data) # 计算百分比变化 percentage_changes = series.pct_change(periods=1) print(percentage_changes) ``` 输出结果为: ``` 0 NaN 1 1.00 2 0.50 3 0.33 4 0.25 dtype: float64 ``` #### 常见问题及解决方法 1. **NaN 值处理** 在计算百分比变化时,第一行的结果始终为 `NaN`,因为没有前一个值可供比较。如果需要移除这些 `NaN` 值,可以使用 `dropna()` 方法[^1]。 ```python percentage_changes_cleaned = percentage_changes.dropna() print(percentage_changes_cleaned) ``` 2. **非数值类型引发错误** 如果输入数据包含非数值类型(如字符串或对象),`pct_change()` 方法将无法正常工作并抛出错误。确保输入数据为数值类型是关键。 ```python # 错误示例:包含非数值数据 invalid_data = [10, "twenty", 30, 40, 50] invalid_series = pd.Series(invalid_data) invalid_series.pct_change() # 将抛出错误 ``` 3. **时间序列数据中的缺失值** 对于时间序列数据,可能存在某些时间点上的缺失值。在调用 `pct_change()` 之前,应先对缺失值进行填充或删除操作,以避免产生不准确的结果[^1]。 ```python # 示例:时间序列数据 dates = pd.date_range('2023-01-01', periods=5) time_series = pd.Series([10, 20, None, 40, 50], index=dates) # 填充缺失值后再计算百分比变化 filled_series = time_series.fillna(method='ffill') percentage_changes_filled = filled_series.pct_change() print(percentage_changes_filled) ``` 4. **多周期百分比变化** 可以通过设置 `periods` 参数来计算跨多个周期的变化率。例如,`periods=2` 表示计算当前值与前两个值之间的变化率[^1]。 ```python multi_period_changes = series.pct_change(periods=2) print(multi_period_changes) ``` #### 示例应用:协整检验中的使用 在引用[1]中提到的协整检验代码片段中,`pct_change()` 被用来计算两个股票每日收益率的变化序列。这是金融数据分析中的典型应用场景之一。 ```python coin_t_statistic, pvalue, _ = coint(gs_jpm['GS'].pct_change().dropna(), gs_jpm['JPM'].pct_change().dropna()) ``` 上述代码中,`pct_change()` 的作用是生成股票价格的每日收益率序列,并通过 `dropna()` 方法移除可能存在的 `NaN` 值,从而确保协整检验的准确性。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值