我想检查 int[] 的选项卡是否是排列,这意味着 3 个特征:
首先,不要重复
第二,数字的范围应该在1到N(大小)之间
最后,1到N之间的所有数字都应该出现在排列中
例如 2 2 3 不是排列,因为 2 是重复的,2 3 4 不是排列,因为 4>N=3 ,还因为数字 1 丢失...
到目前为止,我修复了重复和范围问题,但我仍然需要强制 1 到 N 之间的所有数字出现在排列中,这是到目前为止的代码:
public static boolean isperm(byte[] tab){
for (int i=0;i<tab.length;i++){
if (tab[i]>=1 && tab[i]<=tab.length ) {
for (int j=0;j<tab.length;j++) {
for (int k=j+1;k<tab.length;k++) {
if (tab[k]==tab[j]){ // or use .equals()
return false;
}
}
}
return true;
} else {
return false;
}
}
return false;
}
所以我的问题是一个测试,以验证 int[] 中是否存在 1 到 N 之间的所有数字
最佳答案
我可以提供不同的解决方案吗?
尝试创建一个 tab.length
大小的 boolean 数组,每列代表一个应该在排列中的数字。现在在循环中,检查该数字是否已在临时数组中标记以及其大小是否正确。
这样,您可以验证所有数字都从 1 到 N + 没有重复。 最后,只需检查是否所有数组都已标记,并且您已经检查了所有内容。
祝你好运。
关于java - 如何检查一个数字是否在 1 到 N 之间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16314228/