0
A
回答
1
这是可能的。这是做这件事:
public static void print(int[] array) {
if (array == null || array.length == 0) {
return;
} else {
System.out.println(array[0]);
int[] next = new int[array.length - 1];
System.arraycopy(array, 1, next, 0, array.length - 1);
print(next);
}
}
0
从结束:
void printer(int[] input){
if(input.length > 0){
System.out.println(input[input.length-1]);
printer(Arrays.copyOf(input, input.length-1));
}
}
从开始:
void printer(int[] input){
if(input.length > 0){
System.out.println(input[0]);
printer(Arrays.copyOfRange(input, 1, input.length));
}
}
1
public static void main(String[] args) {
int[] array = new int[] {1, 2, 3, 4, 5};
printArr(array);
}
public static void printArr(int[] a) {
if (a != null && a.length > 0) {
System.out.println(a[0]);
// Call the function printArr with the full array, without the first element
printArr(Arrays.copyOfRange(a, 1, a.length));
}
}
你必须导入java.util.Arrays中
输出:
1
2
3
4
5
0
到目前为止,这里的其他解决方案都涉及到重复复制整个数组减去一个元素。这是非常缓慢的。他们运行在O(n )时间。
有一种方式O(n)的时间,但有List
做到这一点:
public void print(final List<?> list) {
if (list.isEmpty()) {
return;
}
System.out.println(list.get(0));
print(list.subList(1, list.size()));
}
因为subList
是视图而不是副本,这种方法将运行在O(n)时间,你所期望的。可悲的是需要一个List
而不是一个数组。
幸运的是,有一个很简单的方法来得到一个Object
阵列成List
:
final String[] data = {"a", "b", "c", "d"};
List<String> list = Arrays.asList(data);
这并不阵列复制,它只是返回数组作为List
的视图。遗憾的是,这对原始数组不起作用。对于你需要做的是这样的:
final int[] data = {1, 2, 3, 4};
Arrays.stream(data).boxed().collect(toList());
这确实需要一个副本。
我想指出,虽然,一个O(n)的复制后跟为O(n)打印仍然会比单个为O(n )操作更有效率。
相关问题
- 1. 递归 - 打印数
- 2. 打印使用递归
- 3. 用递归打印“*”
- 4. 打印链接使用递归函数
- 5. 打印一个递归数组
- 6. 在java中使用long []打印数组
- 7. 在Java中垂直使用递归打印字符串
- 8. 使用java打印数组
- 9. 在递归函数中打印Python3
- 10. 使用递归函数以相反的顺序打印数组
- 11. 打印树递归
- 12. 打印递归树
- 13. 递归打印C++
- 14. 在C++中使用递归打印斐波纳契数列
- 15. 在C++中通过递归打印数组
- 16. Java:递归地打印钻石
- 17. 使用mips递归打印Fibonacci序列
- 18. Ç - 使用递归打印链表
- 19. 使用递归Python打印输出
- 20. 打印金字塔使用递归仅
- 21. 打印所有不使用递归/栈
- 22. Java-使用递归展平数组
- 23. 使用递归分裂数组java
- 24. 在java中使用递归
- 25. 使用递归在Java中
- 26. 如何使用右侧的递归遍历来打印数组中的偶数?
- 27. Java中的数组打印
- 28. 在java中递归地打印树中的所有节点
- 29. JAVA MissingFormatArgumentException:打印在方法参数中传递的数组
- 30. 在递归中使用一维数组
是的,只要您可以将当前索引存储为字段即可。不建议这样做 - 将当前索引作为参数传递更加简洁。 – 2014-11-22 11:54:28
你也可以打印第一个元素,创建另一个包含所有其他元素的数组,并用这个“子数组”递归地调用你的方法。这当然是一个愚蠢的解决方案,但要求也是愚蠢的。 – 2014-11-22 12:03:20
@JBNizet我想这也是“我的CPU能力太强了,我该如何在'O(n^2)'?中打印数组”。尽管有趣,但这是解决方案。 – 2014-11-22 12:10:08