0

int[] のタブが順列であるかどうか、つまり 3 つの特徴を意味する天気を確認したい:

まず重複禁止

次に、数値の範囲は 1 から N(サイズ) の間である必要があります

最後に、1 から N までのすべての数字が順列に表示されます

たとえば、2 2 3 は順列ではありません。なぜなら、2 は重複しているためです。2 3 4 は、4>N=3 であるため順列ではありません。

これまでのところ、重複と範囲の問題を修正しましたが、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; 
}

だから私の質問は、1からNまでのすべての数字がint []に存在することを確認するテストです

4

3 に答える 3

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;    
     }
于 2013-05-01T07:51:42.150 に答える
0

必要な 3 つの特性はすべて、次の方法で検証できるようです。

(1) int 配列のソート (2) 配列を反復し、1 から len(int 配列) までのすべての項目が存在することを確認する

これは疑わしいほど在宅ワークのように見えるため、疑似コードを提供するつもりはありません。

于 2013-05-01T07:33:07.077 に答える