私はJavaを使用していますが、再帰関数のみを使用し、HashSet ArrayListなどを使用しないで2d配列からすべての異なる値を取得しようとしています。 値は[0-9] すなわち:配列の値が異なる
私が試した何{{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}}; -> Returns 5 (Because 4,2,3,1,0)
{{4,6,2,1,4},{4,4,3,1,4},{1,1,4,2,1},{1,4,0,2,2},{4,1,4,1,1}}; -> Returns 6 (Because 4,2,3,1,0,6)
{{4,4,4,4,4}}; -> Returns 1 (4)
:
public static int numOfColors(int[][] map) {
int colors = 0;
if (map == null || map.length == 0) {
return colors;
} else {
int[] subArr = map[map.length - 1];
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 < map.length - 1; k++) {
for (int l = 0; l < map[k].length; l++) {
if (subArr[i] == map[k][l]) {
continue;
}
}
}
if (k == map.length - 1) {
colors++;
}
}
}
int[][] dest = new int[map.length - 1][];
System.arraycopy(map, 0, dest, 0, map.length - 1);
colors += numOfColors(dest);
return colors;
}
}
しかしmiskateである場合、これは、私のために働いていませんか?
:
これはトリックを行う必要がありますか? –
以前に値を見たことがあるかどうかを知るために、または値を数えた後にすべての瞬間を削除するためには、何らかの種類の記憶装置が必要です。また、再帰は、問題を簡素化したり、ソリューションをより効率的にすることができないため、ここでは奇妙な選択と思われます。 –
デバッグのヘルプを求める質問(「なぜこのコードは動作しませんか」)には、質問自体の中でそれを再現するのに必要な最短のコードです。明確な問題文がない質問は、他の読者にとって有用ではありません。参照:[mcve]を作成する方法 –