如果数组 a 包含完全相同的数字,则数组 a 是数组 b 的排列,因此:
a{ 3, 2, 4, 1, 5 } is permutation of b{ 1, 2, 3, 4, 5, 5 };
我写了这段代码:
int x4a[] = { 3, 2, 4, 1, 5 };
int x4b[] = { 1, 2, 3, 4, 5, 5 };
System.out.println(isPermutation(x4a, x4b));//Should return true
public static boolean isPermutation(int[] a, int[] b) {
return isPermutation(a, b, 0, 0);
}
public static boolean isPermutation(int[] a, int[] b, int indexA, int indexB) {
// This code will return true if the shorter array contains all the members of
// the longer array.
// In this case b will be compared to a
if (a.length < b.length) {
if (indexB == b.length - 1 && a[indexA] == b[indexB])
return true;
else if (a[indexA] == b[indexB])
isPermutation(a, b, 0, indexB + 1);
else if (indexA == a.length - 1 && a[indexA] != b[indexB])
return false;
else if (indexA < a.length - 1 && a[indexA] != b[indexB])
isPermutation(a, b, indexA + 1, indexB);
} else {
if (indexA == a.length - 1 && a[indexA] == b[indexB])
return true;
else if (a[indexA] == b[indexB])
isPermutation(a, b, 0, indexA + 1);
else if (indexB == b.length - 1 && a[indexA] != b[indexB])
return false;
else if (indexB < b.length - 1 && a[indexA] != b[indexB])
isPermutation(a, b, indexA, indexB + 1);
}
// DEAFAULT to eliminate the error
return false;
}
尽管它应该返回true,但它返回false。当我在调试器中运行时,它向我显示递归成功地深入,但是当它退出时,它会运行返回 false 的最后一行。我试图做布尔变量并返回它,但这给了我一个运行错误。
有没有办法避免写最后一行或任何其他方法来解决这个问题?
只需在每个 isPermutation 调用前加上 return,这样最后一行就不会执行。
if (a.length < b.length) {
if (indexB == b.length - 1 && a[indexA] == b[indexB])
return true;
else if (a[indexA] == b[indexB])
return isPermutation(a, b, 0, indexB + 1);
else if (indexA == a.length - 1 && a[indexA] != b[indexB])
return false;
else if (indexA < a.length - 1 && a[indexA] != b[indexB])
return isPermutation(a, b, indexA + 1, indexB);
} else {
if (indexA == a.length - 1 && a[indexA] == b[indexB])
return true;
else if (a[indexA] == b[indexB])
return isPermutation(a, b, 0, indexA + 1);
else if (indexB == b.length - 1 && a[indexA] != b[indexB])
return false;
else if (indexB < b.length - 1 && a[indexA] != b[indexB])
return isPermutation(a, b, indexA, indexB + 1);
}
// DEAFAULT to eliminate the error
return false;
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句