java - 如何递归地反转数组
问题描述
我正在尝试编写一个递归方法,它接收一个整数数组并简单地向后返回该数组。这是我到目前为止所拥有的。
private static int[] reverseArray(int arr[]) {
int arrDup[] = arr.clone();
int x = 0, y = arrDup.length - 1;
if (arrDup[0] == arr[arr.length - 1]) {
return arrDup;
}
else {
// System.out.println(Arrays.toString(arrDup));
arrDup[y--] = arr[x++];
return reverseArray(arrDup);
}
}
public static void main(String[] args) {
int arrPass[] = {1, 2, 3, 4, 5};
System.out.println(Arrays.toString(reverseArray(arrPass)));
}
我该如何解决这个方法,以便它可以正确地反转它?当我运行它时,我只[1, 2, 3, 4, 1]
. 假设数组中没有元素重复。我理解递归,只是想在这里实现它。
解决方案
以下应该是递归解决方案
- 交换第一个和最后一个数字
- 反转数组的其余部分
交换需要一个临时变量。
static void reverseArray(int[] arr, int start, int end) {
if (start >= end)
return;
int temp = arr[start];
arr[start] = arr[end];
arr[end] = temp;
reverseArray(arr, start + 1, end - 1);
}
public static void main(String[] args) {
reverseArray(new int[]{1, 2, 3, 4, 5}, 0, 4);
}
推荐阅读
- node.js - 无法读取未定义的属性,但可以将其记录到控制台
- javascript - Three.JS中使用switch语句加载多个对象
- google-app-engine - Flask 在 Google App Engine 上返回 500?
- laravel-5.8 - 如何更改 Auth::routes(); 中的默认控制器地址?
- r - 使用 := 使用变量名更新列
- python - 如何修复 Flask-WTForms 中的“CSRF 令牌丢失”
- icons - 将字体真棒图标放在 ionic 4 的吐司控制器中
- java - Appium 中 Java 的 ZoomIn/ZoomOut 方法
- python - 将子进程标准输出流式传输到 jupyter(bash 和 python)
- laravel - 如何制作另一个 laravel 护照 api 卫士?