我在Java练习考试.我今天面临的一个问题是:给定一个带有n个数字的数组,我需要检查是否有2个子数组(不必相等)它们的乘法等于 - 如果有,则返回true,否则为false.例如:如果数组为:{2,15,3,4,2,5} - 如果数组为:{2,4,6,2,3,4}将返回True - 将返回False.
答案必须是递归的,没有任何循环.
所以我认为如果有2个子数组,它们的乘法相等则意味着整个数组的总乘数必须是平方根数.例如,在第一个数组中,它是3600,即60.
到目前为止,我找不到任何不适用的情况,但仍然不能确定它将涵盖所有可能的情况.
这是我的代码:
public static boolean splitEqualMult(int[] a) {
double multi = isArrSqrt(a,0);
if(Math.sqrt(multi) == Math.floor(Math.sqrt(multi))) {
return true;
}
return false;
}
private static double isArrSqrt(int[] a, int i) {
if(i == a.length) {
return 1;
}
return a[i] * isArrSqrt(a,i+1);
}
Run Code Online (Sandbox Code Playgroud)
希望听到你的想法!
给定一个数组大小 n 和一个正数 max(max 表示我们可以用来放置在数组中的数字的范围)。
我想计算我可以在数组中放置多少个排序数字组合。
例如 :
如果n = 3, max = 2.(我们可以使用的唯一数字是 1/2,因为最大值是 2)所以排序数组有 4 种组合
1. {1,1,1}
2. {1,1,2}
3. {1,2,2}
4. {2,2,2}
Run Code Online (Sandbox Code Playgroud)
我写了一些代码并成功通过了这个特定的例子,但max > 2没有返回正确答案的任何其他例子。
我发现的问题是当递归到达最后一个索引时,它不会尝试第三个数字,它只是折回。
我的代码:
private static int howManySorted(int n, int max, int index, int numToMax, int prevNum) {
// If the value is bigger then max return 0
if(numToMax > max) {
return 0;
}
if (numToMax < prevNum) {
return 0;
}
//If Index reached the end of …Run Code Online (Sandbox Code Playgroud)