BAEL-7555-count-unique-digit-in-integer (#15933)
* BAEL-7555-count-unique-digit-in-integer * rename test case * add solution using stream
This commit is contained in:
parent
c39267bbf9
commit
2dc927ea9b
@ -0,0 +1,36 @@
|
||||
package com.baeldung.algorithms.uniquedigit;
|
||||
|
||||
import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
|
||||
public class UniqueDigitCounter {
|
||||
|
||||
public static int countWithSet(int number) {
|
||||
number = Math.abs(number);
|
||||
Set<Character> uniqueDigits = new HashSet<>();
|
||||
String numberStr = String.valueOf(number);
|
||||
for (char digit : numberStr.toCharArray()) {
|
||||
uniqueDigits.add(digit);
|
||||
}
|
||||
return uniqueDigits.size();
|
||||
}
|
||||
|
||||
public static int countWithBitManipulation(int number) {
|
||||
if (number == 0) {
|
||||
return 1;
|
||||
}
|
||||
number = Math.abs(number);
|
||||
int mask = 0;
|
||||
while (number > 0) {
|
||||
int digit = number % 10;
|
||||
mask |= 1 << digit;
|
||||
number /= 10;
|
||||
}
|
||||
return Integer.bitCount(mask);
|
||||
}
|
||||
|
||||
public static long countWithStreamApi(int number) {
|
||||
return String.valueOf(Math.abs(number)).chars().distinct().count();
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,38 @@
|
||||
package com.baeldung.algorithms.uniquedigit;
|
||||
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||
|
||||
public class UniqueDigitCounterUnitTest {
|
||||
|
||||
@Test
|
||||
public void givenNotNegativeNumber_whenCountUniqueDigits_thenCorrectCount() {
|
||||
assertEquals(3, UniqueDigitCounter.countWithSet(122333));
|
||||
assertEquals(1, UniqueDigitCounter.countWithSet(0));
|
||||
assertEquals(2, UniqueDigitCounter.countWithSet(101));
|
||||
|
||||
assertEquals(3, UniqueDigitCounter.countWithBitManipulation(122333));
|
||||
assertEquals(1, UniqueDigitCounter.countWithBitManipulation(0));
|
||||
assertEquals(2, UniqueDigitCounter.countWithBitManipulation(101));
|
||||
|
||||
assertEquals(3, UniqueDigitCounter.countWithStreamApi(122333));
|
||||
assertEquals(1, UniqueDigitCounter.countWithStreamApi(0));
|
||||
assertEquals(2, UniqueDigitCounter.countWithStreamApi(101));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void givenNegativeNumber_whenCountUniqueDigits_thenCorrectCount() {
|
||||
assertEquals(3, UniqueDigitCounter.countWithSet(-122333));
|
||||
assertEquals(3, UniqueDigitCounter.countWithBitManipulation(-122333));
|
||||
assertEquals(3, UniqueDigitCounter.countWithStreamApi(-122333));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void givenLargeNumber_whenCountUniqueDigits_thenCorrectCount() {
|
||||
assertEquals(2, UniqueDigitCounter.countWithSet(1000000000));
|
||||
assertEquals(2, UniqueDigitCounter.countWithBitManipulation(1000000000));
|
||||
assertEquals(2, UniqueDigitCounter.countWithStreamApi(1000000000));
|
||||
}
|
||||
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user