Упрощение оператора if


У меня есть рабочее решение для задачи, найденной здесь. Написав его, я заметил, что у меня есть точно такое же утверждение в обеих частях 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 2

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

Строк я добавил будет проверять, если шавка == 6 он вернется minusCur и если не вернется (minusCur || groupSum6(next, nums, target)));

Как насчет этого:

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