这是一种递归回溯方法,用于查找给定数组是否可以求和目标量。 这有效:
public boolean groupSum(int start, int[] nums, int target) {
if(start >= nums.length)
return target ==0;
if(!groupSum(start+1,nums,target-nums[start]))
return groupSum(start+1,nums,target);
return true;
}
这不是:
public boolean groupSum(int start, int[] nums, int target) {
if(start >= nums.length)
return target ==0;
if(!groupSum(start+1,nums,target-nums[start]))
return groupSum(start+1,nums,target);
return false;
}
该方法如何达到最终的返回声明?
答案 0 :(得分:0)
在你的程序中,你有两个if
语句,它们最终都会返回。如果它们都是假的,则最后一次返回有效。因此,当你点击函数的最后一行时,你可以期望这是真的:
start < nums.length && groupSum(start + 1, nums, target - nums[start])
我想也许会有一个更清晰的版本:
public boolean groupSum(int start, int[] nums, int target) {
if (start >= nums.length)
return target == 0;
if (groupSum(start + 1, nums, target - nums[start]))
return true;
return groupSum(start + 1, nums, target);
}
这是完全相同的逻辑,除了我最后切换两个并反转谓词(删除了不是)。