java - 如何求和 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
然后应该。
解决方案
我们可以进行递归调用 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
推荐阅读
- angular - “离子开发应用程序”和“真实手机”上的空白屏幕
- python - 如何在不同的目录中创建文件?(Python)
- react-native-popup-menu - 如何计算上下文菜单的位置?
- javascript - 如何使用文本框值启用和禁用提交按钮
- javascript - LazyLoad 中的 javascript forEach 在 IE 中不起作用
- scala - scala - 将字符串数组解析为单个字符串的更好方法
- c# - 根据C#中的列值将数据表拆分为多个数组
- javascript - 制作更模块化的graphQL项目
- java - 视图有多个标签时如何按标签查找视图?
- python - 如何在 Pandas 中对多个列进行分组和聚合