代码随想录算法训练营第四十五天 | 70. 爬楼梯、322. 零钱兑换、279.完全平方数

70. 爬楼梯

解法:代码随想录

题目:- LeetCode

377. 组合数II代码随想录算法训练营第四十四天 | 518. 零钱兑换 II、377. 组合总和 Ⅳ_weixin_48345569的博客-CSDN博客思路一致,就是“物品”要自己定义成{1,2}

class Solution {
    public int climbStairs(int n) {
        int[] res = new int[n + 1];
        int[] steps = {1, 2};
        res[0] = 1;

        for (int i = 0; i <= n; i++) {
            for (int s : steps) {
                if (i >= s) res[i] += res[i - s];
            }
        }
        return res[n];
    }
}

322. 零钱兑换

解法:代码随想录

题目:- LeetCode

这道题思路因为res[j]代表的是钱币的个数,所以每次+1.

初始化一开始没弄对,注意因为是求相对较小个数,要除了res[0]意外的下标初始化成amout + 1, 或者Integer.MAX_VALUE.

因为是求最小个数,所以先遍历背包和物品的顺序可以置换。以下才用了先物品再背包。

note:Arrays.fill(array_name, value)

class Solution {
    public int coinChange(int[] coins, int amount) {
        int[] res = new int[amount + 1];
        Arrays.fill(res, amount + 1);
        res[0] = 0;
        for (int i : coins) {
            for (int j = i; j <= amount; j++) {
                res[j] = Math.min(res[j], res[j - i] + 1);
            }
        }
        if (res[amount] == amount + 1) return -1;
        return res[amount];
    }
}

279.完全平方数

解法:代码随想录

题目:- LeetCode

思路和细节与上题完全一致,就是注意在遍历背包是将物品值平方。

class Solution {
    public int numSquares(int n) {
        int sq = (int)Math.sqrt(n);
        int[] res = new int[n + 1];
        Arrays.fill(res, n + 1);
        res[0] = 0;
        for (int i = 1; i <= sq; i++) {
            int tmp = i * i;
            for (int j = tmp; j <= n; j++) {
                res[j] = Math.min(res[j], res[j - tmp] + 1);
            }
        }
        return res[n];
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值