递归需要帮助发现java代码中的缺陷
我正在完成一项学校作业,我有以下问题:
我得到了一些木棍(长度不同或相似),我的任务是找出形成给定长度的较长木棍所需的最小木棍数量
比如说,, 给定长度为1,1,1,1,1,3的6根棍棒,以形成长度为5的较长棍棒,输出将为3。 注意:棍棒不能重复使用
但是,如果无法形成给定的长度,则输出-1。 例如, 给定3根长度为1,2,6的木棍,要形成长度为5的较长木棍,输出将为-1
我有以下代码,它们通过了所有公共测试用例。然而,我没有通过私人测试案例,我无法找出我的错误
这是我的密码:
import java.util.*;
class Result {
static int min = 100000;
public static int solve(int pos, int currSum, int len, int numStk) {
// implementation
for (int i=1; i<=Stick.data.length - pos; i++){
if (currSum > len){
continue;
}
else if (currSum < len){
if (pos+i >= Stick.data.length){
break;
}
else{
solve(pos+i,currSum+Stick.data[pos+i], len, numStk+1);
}
}
else if (currSum == len){
if (numStk < min){
min = numStk;
}
}
}
return min;
}
}
class Stick {
static int[] data;
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int sticks = sc.nextInt();
data = new int[sticks];
int len = sc.nextInt();
for (int i=0; i<sticks; i++){
data[i] = sc.nextInt();
}
for (int i=0; i<sticks; i++){
Result.solve(i,0,len,1);
}
if (Result.min == 100000){
System.out.println(-1);
} else {
System.out.println(Result.min-1);
}
}
}
# 1 楼答案
关于您的代码,我注意到了以下几点:
大体上说
Result.solve(i,0,len,1);
假设使用了条i(因此参数列表中有
numsticks = 1
),但currSum为0。那不应该是data[i]
吗更好的代码质量:对
currSum > len
和currSum ==
len的检查可以在for循环之外完成,这更有效