如何使用Java中的递归从数组中删除

时间:2011-09-07 07:35:03

标签: java arrays recursion

如何使用Java中的递归从数组中删除?

数组可以是任意长度和任何整数。

你可能不会使用循环(而对于等等)

例如

[2][4][2][0][9]

应打印(2 4 0 9)

感谢您的协助

3 个答案:

答案 0 :(得分:4)

您不能在Java中从数组中删除元素。不是递归,不是循环。

答案 1 :(得分:2)

我假设你实际上并不想删除元素[正如@aioobe所提到的,它无法完成],但你实际上想:“打印数组中的所有元素,没有重复“。 [我从例子中假设它,你提到你想打印指定的输出]。

执行此操作的方法是维护一个包含您已遇到的所有元素的Set,并且当且仅当您遇到它并且它不在集合中时才打印元素。

递归部分可能是:始终处理i元素(arr[i]),并在何时停止 i == arr.length。不要忘记在每次递归调用中增加i。

看起来应该是这样的:

public static void printNoDupes(int[] arr,int i,Set<Integer> seen) {
    if (i == arr.length) return;
    if (!seen.contains(arr[i])) {
        System.out.print(arr[i] + " ");
        seen.add(arr[i]);
    }
    printNoDupes(arr,i+1,seen);
}
public static void printNoDupes(int[] arr) { 
    printNoDupes(arr,0,new HashSet<Integer>());
    System.out.println();
}

答案 2 :(得分:1)

对数组进行排序,然后使用递归删除元素,如果它与先前找到的元素/参数相同,则表示前一个唯一元素。

正如其他人所说,你不能从原始数组中删除元素,你需要将应该保留的元素复制到一个新数组。