当前位置: 首页 > 知识库问答 >
问题:

如何使用递归将元素添加到数组中,并返回新数组?

锺离良哲
2023-03-14

我必须使用递归在java中创建一个方法(int[]v, int a, int b),该方法接受一个整数数组并返回一个数组,其中数组的每两个元素之间必须有值a或值b,交替。

例如,如果数组v={1,5,6,8},当我调用这样的方法(v,0,1)时,该方法应返回{1,0,5,1,6,0,8}。

任何类型的伪代码都会有帮助,我真的很难实现这个。谢谢!

共有3个答案

贺俊材
2023-03-14

这是另一种方法。它利用了一个助手方法,该方法除接收原始参数外,还接收结果的目标数组和表示当前从源数组复制的值的索引:

import java.util.*;
class Main {

  public static void main(String[] args) {       
    int[] v = {1,5,6,8};
    int[] w = arrAltExpand(v, 0, 1);
    System.out.println(Arrays.toString(v));
    System.out.println(Arrays.toString(w));
  }
  
  public static int[] arrAltExpand(int[] arr, int a, int b) {
    if (arr == null || arr.length == 0) {
      return new int[] {};
    }
    int[] retArr = new int[2 * arr.length - 1];
    arrAltExpandHelper(arr, a, b, retArr, 0);
    return retArr; 
  }
  
  private static void arrAltExpandHelper(int[] arr, int a, int b, int[] retArr, int index) {
    if (index < arr.length) {
      retArr[2 * index] = arr[index];
      if (index < (arr.length - 1)) {
        retArr[2 * index + 1] = (index % 2 == 0) ? a : b;    
      }
      arrAltExpandHelper(arr, a, b, retArr, index+1);
    }
  }
  
}

输出:

[1, 5, 6, 8]
[1, 0, 5, 1, 6, 0, 8]
皇甫通
2023-03-14

首先,我们需要一种连接数组的方法,因为它们不能在Java中调整大小:

int[] concat(int[] p, int[] q) {
    int[] result = new int[p.length + q.length];
    System.arraycopy(p, 0, result, 0, p.length);
    System.arraycopy(q, 0, result, p.length, q.length);
    return result;
}

然后,我们需要一个递归定义:

  • 基本大小写:如果数组的长度不超过2,只需返回数组即可

交换这些值为我们提供了所需的值之间的交替。

int[] inject(int[] v, int a, int b) {
    if (v.length < 2) return v;
    return concat(new int[] {v[0], a},
        inject(Arrays.copyOfRange(v, 1, v.length), b, a));
}

rrays.copyOfRange为我们提供了一种方便的方法来创建一个数组,该数组只是当前数组的“尾部”。调用它:

inject(new int[] {1, 5, 6, 8}, 0, 1));

返回预期的:

{1, 0, 5, 1, 6, 0, 8}

您可以使用几个助手方法使其越来越清晰:

int[] tail(int[] v) {
    return Arrays.copyOfRange(v, 1, v.length);
}

int[] arrayOf(int... ints) {
    return ints;
}

然后递归方法变为:

int[] inject(int[] v, int a, int b) {
    if (v.length < 2) return v;
    return concat(arrayOf(v[0], a), inject(tail(v), b, a));
}
柏麒
2023-03-14

如果能满足你的需要就告诉我

yourMethod(int[] v, int a, int b){
    int[] newArray = new int[v.length*2-1];
    int counter = 0;
    boolean alter = true;

    for(int i=0; i<newArray.length; i++){
        if(i%2==0){
            newArray[i] = v[counter];
            counter++;
        }else{
            if(alter){
                newArray[i] = a;
                alter = !alter;
            }else{
                newArray[i] = b;
                alter = !alter;
            }
        }
    }
}
 类似资料:
  • 问题内容: 我想使用命令将元素添加到JSON文件中的数组,但是不起作用。 文件: 我正在使用此命令: 这是我希望输出看起来的样子: 问题答案: 过滤器中的部件将新元素添加到现有数组。您可以使用类似的过滤器: 为避免使用硬编码的长度值并动态添加新元素,请使用,它返回长度,该长度可用作下一个数组索引,即 (或)根据评论中峰的建议,仅使用运算符 产生所需的输出: 使用jq-play试运行并优化您想要的任

  • 问题内容: 我有以下代码: 这两个附录未编译。那将如何正常工作? 问题答案: 数组的大小无法修改。如果需要更大的数组,则必须实例化一个新数组。 更好的解决方案是使用可以根据需要增长的容器。如果你需要此形式的数组,该方法将为你提供数组。 如果需要将其转换为简单数组… 但是,使用数组执行的大多数操作也可以使用此ArrayList进行:

  • 问题内容: 如果我在PHP中定义了一个数组,例如(我没有定义其大小): 我是否可以使用以下内容简单地添加元素? PHP中的数组没有add方法,例如? 问题答案: 您所描述的两种方法都可以。 是相同的:

  • 各位!我刚刚开始学习wift,如果这个问题很愚蠢,我很抱歉。我想使用循环向数组“uu”添加值。然而每次它都会覆盖“uu”。 请帮忙,谢谢! 我的代码

  • 我试图向数组中添加一个元组(例如,2项元组)。 我得到的是: 找不到接受提供的参数的“=”的重载 提示:我试图超载每个参考书的=: ...但是没有弄对。 有什么想法吗。。。解决方案

  • 本文向大家介绍在PHP中,如何将对象元素添加到数组?,包括了在PHP中,如何将对象元素添加到数组?的使用技巧和注意事项,需要的朋友参考一下 代码如下- 示例 输出结果 这将产生以下输出- 创建对象,然后将其推到数组的末尾(以前存在)。 另类