如何对步骤1和步骤2求和以得出给定距离,计算这些步骤的各种总和并将其返回为整数?

问题描述

public static int jump(int distance,int range1,int range2){

    int res = 0,counter = 0;
    
    range1 + range1 + range1 + range1
    counter = range1 + jump(distance,range1,range2) == distance ? 
    
    if ( range1 + jump(distance,range2) == distance ){
        counter++;
    } else if (  )
    
    range1 + range1 + range2
    
    range2 + range1 + range1
    
    range2 + range2 

    return counter;
}

功能的示例和说明:
方法调用 jump(4,1,2);
输出 5
函数后台应执行的操作
1 + 1 + 1 + 1
1 + 1 + 2
1 + 2 + 1
2 + 1 + 1
2 + 2
因此,它最终能够以不同的方式将步骤1和步骤2相加5次,然后应该return 5

解决方法

我们可以进行jump(3,1,2)的递归调用

                            jump(3,2)
                          /              \
                 jump(2,2)           jump(1,2)
               /          \                 /
      jump(1,2)      jump(0,2)  jump(0,2)
       / 
jump(0,2)

注意:我们能够准确地到达jump(0,2) 3次,因此答案是3。

在每个函数调用中,我们需要处理以下三种情况之一:

情况1:当距离小于0时,这意味着未选择确切的步长,因此我们不计算此路径并返回0

情况2:当距离精确为0时,表示选择了精确的步长,我们返回1

情况3:当距离大于或等于step1或step2时,我们进行递归调用,这是选择step1和step2的总和。

class Solution {

    public static int jump(int distance,int a,int b) {
        if(distance < 0) return 0; // case 1
        if(distance == 0) return 1; // case 2
        return jump(distance - a,a,b) + jump(distance - b,b); // case 3
    }

    public static void main(String[] args) {
        System.out.println(jump(3,2));
    }
}

output: 2