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