その3つの固有の番号を持っているかどうかを確認するために4つの数字のテスト

泡立て器:

私はこのロジックのまわりで私の頭を包む少し問題を抱えて、私は修正していたが、現在は困惑していますと思っています。

目標は、4桁のPINを作成し、3つのユニークな番号を持つことであると1が重複することができます。彼らはだけでなく、任意の順序にすることができます。ここで私はこれまで持っているものです。

boolean UniqueNums(String nums)
{
    for (int i=0; i < 3; i++)
        for (int j=i+1; j < 3; j++)
            if (nums.charAt(i) == nums.charAt(j))
                return false;

    // If no duplicate characters encountered,
    // return true
    return true;
}

だから私は番号を渡すと1137、それが失敗したが、のような他の1371パス。

私は、これは1行でそれをやろうとしていないと私はちょうど数が発生した回数を数えていないよイムによる異なるその後、リンク重複回答リンク、と感じます。もっと長い値を検証する行が渡されます。

すべてのヘルプやアドバイスをいただければ幸いです。

Stormcloud:

何について:

boolean UniqueNums(String data) {
    Set<Character> found = new HashSet<>();
    int count = 0;
    for (char c : data.toCharArray()) {
        boolean noClash = found.add(c);

        count += (noClash ? 0 : 1);
        if (count == 2) {
            return false;
        }
    }

    return true;
}
  • 1234(重複)がtrueを返します
  • 1231(単一の重複)がtrueを返します
  • 1221返し偽(複製のペア)
  • 1112年はfalseを返します(数が倍以上使用しました)

あなたのPINが長く続い4文字である場合にも、それが唯一のO(n)はそれを作る単一のループを必要とし、働き、そしてそれが速い失敗します

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=222497&siteId=1