java - 子集逻辑,跳过所有其他元素

标签 java

给定一个整数数组,是否可以选择一组某些整数,使得该组总和达到给定的目标,并具有以下附加约束:如果选择数组中的某个值在该组中,则不得选择数组中紧随其后的值。 (不需要循环。)

groupNoAdj(0, [2, 5, 10, 4], 12) → true

groupNoAdj(0, [2, 5, 10, 4], 14) → false

groupNoAdj(0, [2, 5, 10, 4], 7) → false

我想知道是否还有什么需要补充的,不太确定错误在哪里:

public boolean groupNoAdj(int start, int[] nums, int target) {
    if (start == nums.length) {return (target == 0);}

    if (groupNoAdj(start + 1, nums, target - nums[start])){
    return true;
  }

    if (groupNoAdj(start + 1, nums, target)){
      return (groupNoAdj(start + 1, nums, target));
    } 

    return false;
}

最佳答案

这是对代码的修改:

public boolean groupNoAdj(int start, int[] nums, int target) {

        if (start >= nums.length) {return (target == 0);}  //neded to change to '>=' because start can go over length of array 

//in your code you return true when the two following numbers from array are chosen, which is contrary to the requirement of the task 
        if (groupNoAdj(start + 2, nums, target - nums[start])){ 
            return true;
        }

        if (groupNoAdj(start + 1, nums, target)){
            return true;
        } 

        return false;
    }

这是全新的代码,例如,对于输入(数组 = [1,2,3,4,5] 和目标 99),仅递归调用函数 groupNoAdj 12 次,而不是 25 次。

    public boolean groupNoAdj(int start, int[] nums, int target) {
        if(target - nums[start] == 0) // there is no need let 'start' be greater than the lenghth of nums' array 
            return true;

  //doing what in the previous code but I am not letting to call function with start greater than the length of nums' array
        if (!(start + 2 >= nums.length) && groupNoAdj(start + 2, nums, target - nums[start])){
            return true;
        } 

        if (!(start + 1 == nums.length) && groupNoAdj(start + 1, nums, target)){
            return true;
        }

        return false;
    }      

此递归背后的逻辑:我正在检查数组列表中所有可能的和(我假设一个数字也是和),但两个数字彼此“相邻”的情况除外。 如果您对此代码有任何疑问,请询问。 解决这个问题没有什么秘诀,你必须简单地练习,练习,再练习,你就会知道如何解决这个问题。

关于java - 子集逻辑,跳过所有其他元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41537567/

相关文章:

java - netbeans 平台应用程序的多个实例

java - Jackson 无法使用 ObjectMapper 映射类

java - JdbcTemplate查询中的多个变量

java - 不支持POST请求方式

java - Xuggler MediaWriter 操作不允许问题

java - Spring boot 2.0.4.RELEASE 默认情况下 fetch eager

java - 哪种距离计算(经度、纬度)更精确?

java - Spring Integration DSL Cafe 示例——如何连接 channel ?

java - 从字符串数组中查找和提取字符串

java - JUnit测试Spring示例中的一些疑问