算法刷题记录 Day38

算法刷题记录 Day38

Date: 2024.04.04

lc 377. 组合总和IV

实际为排列问题。联想一下爬楼梯问题,若每次能爬1或2格,爬到第n阶的方法数,可以由n-1和n-2推出。该题同理,只是拓展了能爬的距离。

c++ 复制代码
class Solution {
public:
    int combinationSum4(vector<int>& nums, int target) {
        int n = nums.size();
        // dp[j]表示和为target的排列个数;
        vector<int> dp(target+1, 0);
        // 到target的方法数,可以由到target-nums[i]的方法数推出来。
        dp[0] = 1;

        for(int j=1; j<=target; j++){
            for(int i=0; i<n; i++){
                if(j >= nums[i] && dp[j-nums[i]] < INT_MAX - dp[j]){
                    dp[j] += dp[j-nums[i]];
                }
            }
        }
        return dp[target];
    }
};

lc 518. 零钱兑换II

c++ 复制代码
// 一维dp数组,组合问题
class Solution {
public:
    int change(int amount, vector<int>& coins) {
        int n = coins.size();
        // dp[j]表示组成金额为j的硬币组合数有几种;
        vector<int> dp(amount+1, 0);
        // d[j] = for(i) dp[j] += dp[j-nums[i]];
        // 初始化:
        dp[0] = 1;

        for(int i=0; i<n; i++){
            int tmp = coins[i];
            for(int j=0; j<=amount; j++){
                if(j >= tmp){
                    dp[j] += dp[j-tmp];
                }
            }
        }

        return dp[amount];
    }
};

// 二维dp数组,组合问题 
class Solution {
public:
    int change(int amount, vector<int>& coins) {
        int n = coins.size();
        // dp[i][j]表示从前i个硬币中,能得到总金额j的总组合数。
        vector<vector<int>> dp(n+1, vector<int>(amount+1, 0));
        // dp[i][j] = for(i) dp[i-1][j] += dp[i][j-coins[i]];
        // 初始化
        dp[0][0] = 1;
        for(int i=1; i<=n; i++){
            for(int j=0; j<=amount; j++){
                // cout<<"i:"<<i<<", j:"<<j<<endl;
                dp[i][j] = dp[i-1][j];
                if(j >= coins[i-1]){
                    dp[i][j] += dp[i][j-coins[i-1]];
                }
            }
        }
        return dp[n][amount];

    }
};
相关推荐
x_yeyue2 小时前
三角形数
笔记·算法·数论·组合数学
念何架构之路3 小时前
Go语言加密算法
数据结构·算法·哈希算法
AI科技星3 小时前
《数学公理体系·第三部·数术几何》(2026 年版)
c语言·开发语言·线性代数·算法·矩阵·量子计算·agi
失去的青春---夕阳下的奔跑3 小时前
560. 和为 K 的子数组
数据结构·算法·leetcode
黎阳之光3 小时前
黎阳之光:以视频孪生重构智慧医院信息化,打造高标项目核心竞争力
大数据·人工智能·物联网·算法·数字孪生
丷丩4 小时前
三级缓存下MVT地图瓦片服务性能优化策略
算法·缓存·性能优化·gis·geoai-up
m0_629494734 小时前
LeetCode 热题 100-----25.回文链表
数据结构·算法·leetcode·链表
ʚ希希ɞ ྀ5 小时前
单词拆分----dp
算法
智者知已应修善业6 小时前
【51单片机LED闪烁10次数码管显示0-9】2023-12-14
c++·经验分享·笔记·算法·51单片机
智者知已应修善业6 小时前
【51单片机2按键控制1个敞亮LED灯闪烁和熄灭】2023-11-3
c++·经验分享·笔记·算法·51单片机