Java 动态规划:子集逻辑

Java 动态规划:子集逻辑,java,Java,给定一个整数数组,是否可以从起始索引开始选择一组整数,以使该组与给定目标相加?但是,还有一个附加约束,即必须选择所有6个 组SUM6(0[5,6,2],8)→ 真的 组SUM6(0[5,6,2],9)→ 假的 组SUM6(0[5,6,2],7)→ 假的 只是想弄清楚我错在哪里。为nums[start]==6声明一个特例是否是错误的方法 public boolean groupSum6(int start, int[] nums, int target) { if (nums[start] &

给定一个整数数组,是否可以从起始索引开始选择一组整数,以使该组与给定目标相加?但是,还有一个附加约束,即必须选择所有6个

组SUM6(0[5,6,2],8)→ 真的

组SUM6(0[5,6,2],9)→ 假的

组SUM6(0[5,6,2],7)→ 假的

只是想弄清楚我错在哪里。为nums[start]==6声明一个特例是否是错误的方法

public boolean groupSum6(int start, int[] nums, int target) {

 if (nums[start] >= nums.length) {return (target == 0);} 

 if (nums[start] == 6){ 
 return groupSum6(start++, nums, target - nums[start]);
 }

 if (groupSum6(start++, nums, target - nums[start])) {return true;}
 //if a particular number is choosen 

 if (groupSum6(start++, nums, target)) {return true;}
 //if that particular  number is not chosen

 return false;
}

问题:checkValue方法中整数a的值是多少

int a = 4;
checkValue(a++);
void method(int value){
    System.out.println(a);
}

public boolean groupSum6(int start, int[] nums, int target) {

    if (start == nums.length) {return (target == 0);} //why did you compare some arbitrary number from array with length of this array? 

    if (nums[start] == 6){
        return groupSum6(start+1, nums, target - nums[start]);
    }

    if (groupSum6(start+1, nums, target - nums[start])) {return true;} //when you use start++ , you are calling the method with the same argument (i.e. start) recursively
    //if a particular number is choosen 

    if (groupSum6(start+1, nums, target)) {return true;}
    //if that particular  number is not chosen

    return false;
}
顺便说一句,您可以用更少的代码行完成:

public boolean groupSum6(int start, int[] nums, int target) {

    if (start == nums.length) {return (target == 0);}

    else if (nums[start] == 6){
        return groupSum6(start+1, nums, target - nums[start]);
    }

    else return (groupSum6(start+1, nums, target - nums[start])) || (groupSum6(start+1, nums, target)) ;

}

谢谢你的回复。为错误道歉,我的意思是说“开始”而不是nums[start]。问题:使用start++和start+1之间有区别吗?你不应该道歉,我们是人类,我们在犯错误。这很正常。a++使用变量,然后增加变量++a递增,然后使用变量,但是++a在这里也不合适,为什么?当您使用(a+1)调用方法时,您不会更改中的值a。当您使用(a+1)递归调用方法时,您不会更改当前递归级别中的值a,但在下一个递归级别中,值a将增加1(即a=a+1)