简化if语句

时间:2015-05-27 19:39:15

标签: java if-statement logical-operators simplification

我找到了一个解决问题的工作解决方案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);
}

经过一点点重组后,我能够“解决”问题:

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);
}

我绝对更喜欢第二种解决方案,即使它有点冗长。我的问题是,有没有办法进一步简化这个?我觉得有一个if语句返回true,但我可能只是在分析问题。我只是要求提高我的逻辑简化能力,而不是因为我认为这是必要的。

2 个答案:

答案 0 :(得分:2)

这里更加简化了。

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是否会返回minusCur,如果不是,它将返回(minusCur || groupSum6(next, nums, target)));

答案 1 :(得分:0)

这个怎么样:

return(cur == 6 ? groupSum6(next, nums, target - cur) : (groupSum6(next, nums, target - cur) || groupSum6(next, nums, target)))