java - 简化 if 语句

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

我绝对更喜欢第二种解决方案,尽管它有点冗长。我的问题是,有没有办法进一步简化这个过程?对于返回 true 的 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 是否返回 minusCur,否则返回 (minusCur || groupSum6(next, nums, target)));

关于java - 简化 if 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30491665/

相关文章:

c - c中 'or'逻辑之间的区别

java - 来自反射的哈希码?

java - Samza/Kafka 更新元数据失败

java - Java 中带有环境变量的 new File()

javascript - if/else 语句仅返回最终条件的问题

javascript - 如何使 If 语句同时工作?

java - 我如何从这个对象打印? java

javascript - 如何在 JavaScript 中为 if 语句创建数组或变量?

javascript - Replace(),替换一个未指定的值

python - Python的短路有什么值(value)?