Core Java

Counting the Number of Unique Digits in an Integer in Java

Counting the number of unique digits in an integer is an interesting problem that involves analyzing the individual digits of a number and determining how many of them are distinct. This article will explore several approaches to solving this problem using Java.

1. Understanding the Problem

To solve the problem of counting unique digits in an int like 229987 or 627765, we aim to identify and tally the distinct digits present in each number.

Example:

Consider the integer 229987:

  • Digits: 2, 2, 9, 9, 8, 7
  • Unique Digits: 2, 9, 8, 7 (each digit appears only once)

The count of unique digits in 229987 is 4.

Similarly, for the integer 627765:

  • Digits: 6, 2, 7, 7, 6, 5
  • Unique Digits: 6, 2, 7, 5 (each digit appears only once)

The count of unique digits in 627765 is 4.

2. Using a Set

One of the straightforward ways to solve this problem is by leveraging a Set data structure to keep track of unique digits encountered.

public class UniqueDigitsCounter {

    public static int countUniqueDigits(int number) {
        // Take the absolute value of the number
        number = Math.abs(number);

        Set<Integer> digits = new HashSet<>();
        
        while (number > 0) {
            int digit = number % 10;
            digits.add(digit);
            number /= 10;
        }
        
        return digits.size();
    }

    public static void main(String[] args) {
        int number = 229987;
        int uniqueDigitsCount = countUniqueDigits(number);
        System.out.println("Number of unique digits: " + uniqueDigitsCount);
    }
}

In this code snippet, we use Math.abs(number) to ensure that number is positive before processing its digits. we iterate through each digit of the number by repeatedly taking the remainder when divided by 10 (number % 10). We add each digit to a Set which automatically handles uniqueness. Finally, the size of the Set gives us the count of unique digits.

The output from running this code is:

Fig 1: Output from the example of using a Set to count unique digits in Java
Fig 1: Output from the example of using a Set to count unique digits in Java

3. Using Bit Manipulation

Bit manipulation can also be used to track unique digits. Below is an example:

public class BitsManipulationUniqueDigitsCounter {

    public static int countUniqueDigits(int number) {

        // Take the absolute value of the number
        number = Math.abs(number);

        int seen = 0;

        while (number > 0) {
            int digit = number % 10;
            seen |= (1 << digit);
            number /= 10;
        }

        int count = 0;
        while (seen > 0) {
            if ((seen & 1) == 1) {
                count++;
            }
            seen >>= 1;
        }

        return count;
    }

    public static void main(String[] args) {
        int number = 627765;
        int uniqueDigitsCount = countUniqueDigits(number);
        System.out.println("Number of unique digits: " + uniqueDigitsCount);
    }
}

In this method, we use an integer as a bitmask to represent which digits (from 0 to 9) have been seen. As we iterate through each digit of the number, we set the corresponding bit in the bitmask. Finally, we count the number of bits that are set (indicating the unique digits).

Output from running the above code snippet is:

Number of unique digits: 4

4. Using Stream API

We can efficiently calculate the count of unique digits in any given integer number by leveraging Java’s Stream API operations (chars(), distinct(), count()) on the string representation of the number like this:

public class StreamsUniqueDigitsCounter {

    public static int countUniqueDigits(int number) {
        // Take the absolute value of the number
        number = Math.abs(number);

        long digits = String.valueOf(number).chars().distinct().count();
        return (int) digits;
        // Using Java 8+
        // return Math.toIntExact(digits);
    }

    public static void main(String[] args) {
        int number = 62776;
        int uniqueDigitsCount = countUniqueDigits(number);
        System.out.println("Number of unique digits: " + uniqueDigitsCount);
    }
}

In this code snippet, we use the String.valueOf(number) method to convert the integer number into its string representation. After converting the number to a string, the chars() method is invoked on the string which returns an IntStream of Unicode code points representing the characters of the string. We then use the distinct() method to filter out any duplicate characters. Finally, we use the count() method to count the number of distinct digits present in the original number.

The output is:

Number of unique digits: 3

5. Download the Source Code

This article has explored different ways to tackle the problem of counting unique digits in an integer using Java. This was an article on how to count the unique digits in an int value using Java.

Download
You can download the full source code of this example here: Count unique digits in int using Java

Omozegie Aziegbe

Omos holds a Master degree in Information Engineering with Network Management from the Robert Gordon University, Aberdeen. Omos is currently a freelance web/application developer who is currently focused on developing Java enterprise applications with the Jakarta EE framework.
Subscribe
Notify of
guest

This site uses Akismet to reduce spam. Learn how your comment data is processed.

0 Comments
Inline Feedbacks
View all comments
Back to top button