简化 if 语句
Simplifying an if statement
对于发现的问题,我有一个可行的解决方案 here。写完之后,我注意到我在 if/else:
的两部分中都有完全相同的语句
public boolean groupSum6(int start, int[] nums, int target) {
if(start >= nums.length) return target == 0;
int next = start + 1;
int cur = nums[start];
if(cur == 6) return groupSum6(next, nums, target - cur);
return groupSum6(next, nums, target - cur) || groupSum6(next, nums, target);
}
稍作调整后,我能够'simplify'解决这个问题:
public boolean groupSum6(int start, int[] nums, int target) {
if(start >= nums.length) return target == 0;
int next = start + 1;
int cur = nums[start];
if(cur != 6) {
boolean success = groupSum6(next, nums, target);
if(success) return true;
}
return groupSum6(next, nums, target - cur);
}
我绝对更喜欢第二种解决方案,尽管它有点冗长。我的问题是,有没有办法进一步简化这个?对于 returns 为真的 if 语句,我觉得有些不对劲,但我可能只是过度分析了这个问题。我只是要求提高我的逻辑简化能力,而不是因为我认为这是必须要做的事情。
这里比较简单
public boolean groupSum6(int start, int[] nums, int target) {
if(start >= nums.length) return target == 0;
int next = start + 1;
int cur = nums[start];
boolean minusCur = groupSum6(next, nums, target - cur);
return (cur == 6) ? minusCur : (minusCur || groupSum6(next, nums, target));
}
我添加的行将检查 cur == 6 它会 return minusCur 如果不是它会 return (minusCur || groupSum6(next, nums, target)));
这个怎么样:
return(cur == 6 ? groupSum6(next, nums, target - cur) : (groupSum6(next, nums, target - cur) || groupSum6(next, nums, target)))
对于发现的问题,我有一个可行的解决方案 here。写完之后,我注意到我在 if/else:
的两部分中都有完全相同的语句public boolean groupSum6(int start, int[] nums, int target) {
if(start >= nums.length) return target == 0;
int next = start + 1;
int cur = nums[start];
if(cur == 6) return groupSum6(next, nums, target - cur);
return groupSum6(next, nums, target - cur) || groupSum6(next, nums, target);
}
稍作调整后,我能够'simplify'解决这个问题:
public boolean groupSum6(int start, int[] nums, int target) {
if(start >= nums.length) return target == 0;
int next = start + 1;
int cur = nums[start];
if(cur != 6) {
boolean success = groupSum6(next, nums, target);
if(success) return true;
}
return groupSum6(next, nums, target - cur);
}
我绝对更喜欢第二种解决方案,尽管它有点冗长。我的问题是,有没有办法进一步简化这个?对于 returns 为真的 if 语句,我觉得有些不对劲,但我可能只是过度分析了这个问题。我只是要求提高我的逻辑简化能力,而不是因为我认为这是必须要做的事情。
这里比较简单
public boolean groupSum6(int start, int[] nums, int target) {
if(start >= nums.length) return target == 0;
int next = start + 1;
int cur = nums[start];
boolean minusCur = groupSum6(next, nums, target - cur);
return (cur == 6) ? minusCur : (minusCur || groupSum6(next, nums, target));
}
我添加的行将检查 cur == 6 它会 return minusCur 如果不是它会 return (minusCur || groupSum6(next, nums, target)));
这个怎么样:
return(cur == 6 ? groupSum6(next, nums, target - cur) : (groupSum6(next, nums, target - cur) || groupSum6(next, nums, target)))