有人能告诉我我做错了什么吗

hkmswyz6  于 2021-07-04  发布在  Java
关注(0)|答案(2)|浏览(375)

我在采访中遇到一个问题,关于一个能后退一步或移动两倍于当前距离的人。把每一个动作看作一个单独的动作,找出他从x到y的最小动作。

import java.util.*;
import java.io.*;

public class Main
{
    public static int Solve(int x,int y)
    {
        if(x==0)
        {
            return Integer.MAX_VALUE;
        }
        else if(x==y)
        {
            return 0;
        }
        else if(x==1)
        {
            return 1+Solve(x*2,y);
        }
        return Math.min(1+Solve(x*2,y),1+Solve(x-1,y));
    }

    public static void main(String[] args) 
    {
        Scanner sc=new Scanner(System.in);
        int x=sc.nextInt();
        int y=sc.nextInt();
        int z=Solve(x,y);
        System.out.print(z);
    }
}
jvlzgdj9

jvlzgdj91#

这是一个无限循环。解(x2,y)会停在什么地方?
假设所有这些都只在一个轴上(1d),因为您定义了int x和int y。假设我们有x和y,如果y-x是正的,那意味着我们必须前进。如果y-x是奇数,假设是7,这意味着我们必须向前走8步(4
2),然后向后走1步。给我们5步。所以我们得走了

(((y-x) + 1)/2) + 1

所以7+1=8,我们向前走8步,走两步,然后再走一步回来。如果是偶数,那就意味着我们可以一直往前走!所以

(y-x)/2

如果y-x是负数,这意味着我们必须回去。唯一的办法是后退一步(x-1),所以那就是

-(y-x) steps.

你可以写代码。我喜欢你的代码的递归方面,但是如果它是1d的话,那就太过分了。

6ljaweal

6ljaweal2#

不确定这里是否需要基于递归的解决方案。
这里有两个子问题:
计数向后移动时 from >= to 否则,计数会向前移动,并考虑差异出现的情况 to - from 是奇怪的:然后需要一个额外的向前移动和一个后退。
这可以通过三元运算符来解决:

public static int findMoveCount(int from, int to) {
    return from >= to ? from - to : (to - from) % 2 * 2 + (to - from)/2;
}

相关问题