首页 > 解决方案 > 如何求和 step1 和 step2 以达到给定的距离,计算这些步骤的各种总和并将其作为整数返回?

问题描述

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, range1, 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然后应该。

标签: javarecursion

解决方案


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

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

注意:我们可以jump(0, 1, 2)恰好达到 3 次,因此,答案是 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, a, b); // case 3
    }

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

output: 2


推荐阅读