为什么这种方法有效?
Why does this method work?
这是一种递归回溯方法,用于确定给定数组的总和是否可以达到目标数量。
这有效:
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;
}
该方法如何到达最终的 return 语句?
在您的程序中,您有两个 if
语句,它们都以 returning 结束。如果两者都为假,则最后一个return生效。因此,当您点击函数的最后一行时,您可以期望这是真的:
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);
}
这是完全相同的逻辑,只是我将最后两个调换并反转了谓词(删除了 not)。
这是一种递归回溯方法,用于确定给定数组的总和是否可以达到目标数量。 这有效:
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;
}
该方法如何到达最终的 return 语句?
在您的程序中,您有两个 if
语句,它们都以 returning 结束。如果两者都为假,则最后一个return生效。因此,当您点击函数的最后一行时,您可以期望这是真的:
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);
}
这是完全相同的逻辑,只是我将最后两个调换并反转了谓词(删除了 not)。