栏目分类:
子分类:
返回
终身学习网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
终身学习网 > IT > 软件开发 > 后端开发 > Java

for里面多条件判断慎用

Java 更新时间:发布时间: 百科书网 趣学号
问题产生的原因是最近在leetcode刷题,零钱兑换2中产生的,思路一下子陷进了死胡同,放两段代码,上面的是错误的,下面是正确的。
//错误的
public int change(int amount, int[] coins) {
        int[] dp = new int[amount + 1];
        dp[0] = 1;
        for (int coin : coins) {
            for (int i = 1; i <= amount && i >= coin; i++) {
                dp[i] += dp[i - coin];
            }
        }
        return dp[amount];
}

//正确的
public int change(int amount, int[] coins) {
        int[] dp = new int[amount + 1];
        dp[0] = 1;
        for (int coin : coins) {
            for (int i = 1; i <= amount; i++) {
            	if (i >= coin) dp[i] += dp[i - coin];
            }
        }
        return dp[amount];
}
看出啥问题了吧,我吧for里面的判断提到了for循环中间去判断了,只要失败了,这次for就等于结束了,其实也有办法可以把if条件往for中提。
public int change(int amount, int[] coins) {
        int[] dp = new int[amount + 1];
        dp[0] = 1;
        for (int coin : coins) {
            for (int i = coin; i <= amount; i++) {
                dp[i] += dp[i - coin];
            }
        }
        return dp[amount];
}
既然我们需要i大于等于coin才能执行里面的,那i初始值就直接等于coin就好了
转载请注明:文章转载自 www.051e.com
本文地址:http://www.051e.com/it/295230.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 ©2023-2025 051e.com

ICP备案号:京ICP备12030808号