如果相同,则乘以数组中的值

时间:2020-07-29 04:46:46

标签: java

我想写一个遵循这种逻辑的递归方法:

如果数组为[3,3,3,3],则它将返回值30,因为Trail [i]的连续数彼此相等。所以这里发生的是3 +(3 * 2)+(3 * 3)+(3 * 4)= 30

另一个例子是[2,4,3],它将返回值9

我希望这是有道理的

有人可以帮忙吗?

4 个答案:

答案 0 :(得分:1)

您可以尝试这种方式

  int sum(int pos, int[] trail, int cnt) {
    if (pos >= trail.length) {   // when full array traversed
      return 0;
    }
    if (pos != 0 && trail[pos - 1] == trail[pos]) {         // if previous element is same 
      return (cnt + 1) * trail[pos] + sum(pos + 1, trail, cnt + 1);
    } else {                                                // first element or prev not same
      return trail[pos] + sum(pos + 1, trail, 1);
    }
  }

以这种方式调用sum(0, trail, 0)

答案 1 :(得分:1)

您为什么需要递归?

简单的循环就可以完成工作:

public int sum(int[] arr) {
    int sum = 0;
    for (int i = 0, p = 0; i < arr.length; i++) {
        if (i == 0 || arr[i] == arr[i - 1]) {
            p++;
        } else {
            p = 1;
        }
        sum += arr[i] * p;
    }
    return sum;
}

更新

Java 8 Stream API可用于产生相同的结果:

public int sumStream(int[] arr) {
    int[] pp = {0};

    return IntStream.range(0, arr.length)
                    // update the quotient for the i-th element
                    .peek(i -> {
                        pp[0] = i == 0 || arr[i] == arr[i - 1] ? pp[0] + 1 : 1;
                    })
                    .map(i -> pp[0] * arr[i])
                    .sum();
}

答案 2 :(得分:1)

正如其他人已经提到的那样,无需使用递归就可以很容易地将其编写为交互函数,但是如果由于某些原因您仍然想要递归函数,则将如下所示:

int recursiveHelper(int[] nums, int index, int pow){
if(index >= nums.length) return 0;

if(index == 0)
  return nums[0] + recursiveHelper(nums, index+1,0);
else{
    if(nums[index] == nums[index-1])
       return nums[index] * pow + recursiveHelper(nums, index, pow+1);
    else
       return nums[index] + recursiveHelper(nums, index+1,0);

   }

}

请注意我们如何传递 pow 变量来跟踪整数的重复。如果一个数字不等于其前一个数字,则忽略pow并将其设置为0。如果一个数字不等于其前一个数字,我们将pow递增并调用递归函数。

注意::我没有执行此操作,这里可能会有一些错别字和错误,但这应该可以让您了解如何开始。

答案 3 :(得分:0)

        int[] values = new int[]{3,3,3,3};
        int currentNumber=0,previousNumber=-1,count=1,sum=0;

        for(int i = 0; i<values.length;i++,previousNumber = currentNumber){
            currentNumber = values[i];
            if(currentNumber == previousNumber){
                count++;
            }else{
                count=1;
            }
            sum += currentNumber*count;
        }
        System.out.println("Sum : " + sum);