微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

找到从 x 到 y

如何解决找到从 x 到 y

仍在为递归而苦苦挣扎。 我有一个代码,它应该让我进行最少的操作,以便从 x 到 y。 只能乘以 2 或加 +1 例如从 7 到 12 ......它的 5 次操作,因为你需要 +1 五次。 我的代码无法正常工作,我无法弄清楚我缺少什么才能使其正确。

public static int minops(int x,int y)
{
    if (x >= y) return 0;
        int add = 1 + minops(x + 1,y);
        int mul = 1 + minops(x * 2,y);
    return Math.min(add,mul);
}

解决方法

您没有考虑到超调是不合法的,因此返回 0 是不正确的。只需在您的基本情况下更改以下内容

if(x > y) return Integer.MAX_VALUE;
if(x == y) return 0;
,

@arjunkhera's answer 有正确的想法——当你超量时返回一个“可怕的”结果,所以你永远不要选择它——但需要避免在结果中加 1 时潜在的溢出:

public static int minOps(int x,int y)
{
    // Return 1 less that MAX_VALUE,so adding 1 doesn't overflow.
    // You'll never get as far as here anyway,your stack will overflow long
    // before,so subtracting 1 makes no practical difference.
    if (x > y) return Integer.MAX_VALUE - 1;
    if (x >= y) return 0;

    int add = 1 + minOps(x + 1,y);
    int mul = 1 + minOps(x * 2,y);
    return Math.min(add,mul);
}

或者,您可以推迟添加 1 到以后:

    if (x > y) return Integer.MAX_VALUE;
    if (x >= y) return 0;

    int add = minOps(x + 1,y);
    int mul = minOps(x * 2,y);
    return 1 + Math.min(add,mul);

因为至少 addmul 之一不等于 MAX_VALUE

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。