我必须使用递归在java中创建一个方法(int[]v, int a, int b),该方法接受一个整数数组并返回一个数组,其中数组的每两个元素之间必须有值a或值b,交替。
例如,如果数组v={1,5,6,8},当我调用这样的方法(v,0,1)时,该方法应返回{1,0,5,1,6,0,8}。
任何类型的伪代码都会有帮助,我真的很难实现这个。谢谢!
这是另一种方法。它利用了一个助手方法,该方法除接收原始参数外,还接收结果的目标数组和表示当前从源数组复制的值的索引:
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]
首先,我们需要一种连接数组的方法,因为它们不能在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;
}
然后,我们需要一个递归定义:
交换这些值为我们提供了所需的值之间的交替。
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));
}
如果能满足你的需要就告诉我
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中,如何将对象元素添加到数组?的使用技巧和注意事项,需要的朋友参考一下 代码如下- 示例 输出结果 这将产生以下输出- 创建对象,然后将其推到数组的末尾(以前存在)。 另类