How to check if every digit in a number appears only once in Java

2 Answers

0 votes
import java.util.HashSet;
import java.util.Set;

public class UniqueDigits {

    public static boolean allDigitsUnique(int n) {
        String s = String.valueOf(n);
        Set<Character> digits = new HashSet<>();

        for (char c : s.toCharArray()) {
            if (digits.contains(c)) {
                return false;
            }
            digits.add(c);
        }

        return true;
    }

    public static void main(String[] args) {
        int n = 123456;
        System.out.println(allDigitsUnique(n) ? "Unique" : "Not unique");

        n = 123452;
        System.out.println(allDigitsUnique(n) ? "Unique" : "Not unique");
    }
}



/*
run:

Unique
Not unique

*/

 



answered Feb 26 by avibootz
0 votes
public class UniqueDigits {

    // n % 10 extracts the last digit.
    // 1 << digit creates a bitmask for that digit.
    // (mask & bit) checks whether the bit for this digit is already set.
    // Mark the digit as seen: mask |= bit; This sets the bit for the current digit.
    public static boolean allDigitsUnique(int n) {
        int mask = 0;

        while (n > 0) {
            int digit = n % 10;
            int bit = 1 << digit;

            if ((mask & bit) != 0) {   // digit already seen
                return false;
            }

            mask |= bit;              // mark digit as seen
            n /= 10;
        }

        return true;
    }

    public static void main(String[] args) {
        int n = 123456;
        System.out.println(allDigitsUnique(n) ? "Unique" : "Not unique");

        n = 123452;
        System.out.println(allDigitsUnique(n) ? "Unique" : "Not unique");
    }
}



/*
run:

Unique
Not unique

*/

 



answered Feb 26 by avibootz
...