我想检查天气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之间的所有数字的测试答案 0 :(得分:2)
我可以提供不同的解决方案吗?
尝试创建一个大小为tab.length
的布尔数组,每列代表一个应该在排列中的数字。现在在你的循环中,检查数字是否已经在临时数组中标记,以及它的大小是否合适。
这样,您可以验证所有数字是从1到N +没有重复。 最后,只需检查是否所有阵列都已标记,并检查了所有内容。
祝你好运。答案 1 :(得分:0)
看起来所有三个必需的特征都可以通过以下方式验证:
(1)对int数组进行排序 (2)迭代数组并确保从1到len(int数组)的所有项都存在
我不会提供任何伪代码,因为这看起来像家庭作业。
答案 2 :(得分:0)
这应该是
boolean isPermutation(int[] a, int n) {
if (a.length != n) {
return false;
}
Arrays.sort(a);
for (int i = 0; i < n - 1; i++) {
if (a[i] != a[i + 1] - 1) {
return false;
}
}
return true;
}