gpt4 book ai didi

java - numOfColors 递归函数 JAVA

转载 作者:行者123 更新时间:2023-11-29 04:36:08 24 4
gpt4 key购买 nike

我正在尝试用 Java 编写递归函数。

该函数需要为我计算数组中的所有不同值。

{{1,1,1,1},{4,4,4,4},{3,3,1,1}}

递归函数返回3(1,4,3)

这是我需要编写的函数:

int numOfColors(int[][] map) 

我尝试过的:

public static int numOfColors(int[][] arr) {

int i=0;
int j=0;
int colors=0;
int contains = arr[i][j];
if (arr== null) {
return 0;
} else if (arr[i][j] != 0&& arr[i][j]!=contains) {
colors ++;
}
return numOfColors(arr) + 1;
}

Exception in thread "main" java.lang.StackOverflowError

我该如何解决?

谢谢!

最佳答案

下面是一种使用递归查找唯一值计数的方法,而不使用任何 SetList -

package test;

public class Main {

public static void main(String[] args) {
int[][] arr = { { 4, 2, 2, 1, 4 }, { 4, 4, 3, 1, 4 }, { 1, 1, 4, 2, 1 }, { 1, 4, 0, 2, 2 }, { 4, 1, 4, 1, 1 } };
System.out.println(numOfColors(arr));

}

public static int numOfColors(int[][] arr) {
int unique = 0;
if (arr.length == 0) {
return unique;
} else {
int[] subArr = arr[arr.length - 1];

outerLoop: for (int i = 0; i < subArr.length; i++) {
int j = i + 1;
for (; j < subArr.length; j++) {
if (subArr[i] == subArr[j]) {
break;
}
}
if (j == subArr.length) {
int k = 0;
for (; k < arr.length - 1; k++) {
for (int l = 0; l < arr[k].length; l++) {
if (subArr[i] == arr[k][l]) {
continue outerLoop;
}
}
}
if (k == arr.length - 1) {
unique++;
}
}
}
int[][] dest = new int[arr.length - 1][];
System.arraycopy(arr, 0, dest, 0, arr.length - 1);
unique += numOfColors(dest);
return unique;
}
}
}

输出
5

请注意,此问题无需递归即可轻松解决。此外,使用 Set

可以简化上面的代码

关于java - numOfColors 递归函数 JAVA,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41431464/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com