如何检查一个数字介于1和N之间

时间:2013-05-01 07:17:49

标签: java duplicates range permutation

我想检查天气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之间的所有数字的测试

3 个答案:

答案 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;    
     }