diff --git a/DIRECTORY.md b/DIRECTORY.md index 0c9aeca4e59a..e34b9eba1247 100644 --- a/DIRECTORY.md +++ b/DIRECTORY.md @@ -466,6 +466,7 @@ * [SumWithoutArithmeticOperators](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/maths/SumWithoutArithmeticOperators.java) * [TrinomialTriangle](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/maths/TrinomialTriangle.java) * [TwinPrime](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/maths/TwinPrime.java) + * [UniformNumbers](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/maths/UniformNumbers.java) * [VampireNumber](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/maths/VampireNumber.java) * [VectorCrossProduct](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/maths/VectorCrossProduct.java) * [Volume](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/maths/Volume.java) @@ -597,6 +598,7 @@ * [UnionFind](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/searches/UnionFind.java) * [UpperBound](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/searches/UpperBound.java) * slidingwindow + * [LongestSubarrayWithSumLessOrEqualToK](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/slidingwindow/LongestSubarrayWithSumLessOrEqualToK.java) * [LongestSubstringWithoutRepeatingCharacters](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/slidingwindow/LongestSubstringWithoutRepeatingCharacters.java) * [MaxSumKSizeSubarray](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/slidingwindow/MaxSumKSizeSubarray.java) * [MinSumKSizeSubarray](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/slidingwindow/MinSumKSizeSubarray.java) @@ -1119,6 +1121,7 @@ * [SumWithoutArithmeticOperatorsTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/maths/SumWithoutArithmeticOperatorsTest.java) * [TestArmstrong](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/maths/TestArmstrong.java) * [TwinPrimeTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/maths/TwinPrimeTest.java) + * [UniformNumbersTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/maths/UniformNumbersTest.java) * [VolumeTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/maths/VolumeTest.java) * misc * [ColorContrastRatioTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/misc/ColorContrastRatioTest.java) @@ -1228,6 +1231,7 @@ * [UnionFindTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/searches/UnionFindTest.java) * [UpperBoundTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/searches/UpperBoundTest.java) * slidingwindow + * [LongestSubarrayWithSumLessOrEqualToKTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/slidingwindow/LongestSubarrayWithSumLessOrEqualToKTest.java) * [LongestSubstringWithoutRepeatingCharactersTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/slidingwindow/LongestSubstringWithoutRepeatingCharactersTest.java) * [MaxSumKSizeSubarrayTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/slidingwindow/MaxSumKSizeSubarrayTest.java) * [MinSumKSizeSubarrayTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/slidingwindow/MinSumKSizeSubarrayTest.java) diff --git a/src/main/java/com/thealgorithms/maths/UniformNumbers.java b/src/main/java/com/thealgorithms/maths/UniformNumbers.java new file mode 100644 index 000000000000..c83783aab0b3 --- /dev/null +++ b/src/main/java/com/thealgorithms/maths/UniformNumbers.java @@ -0,0 +1,50 @@ +package com.thealgorithms.maths; + +/** + * A positive integer is considered uniform if all + * of its digits are equal. For example, 222 is uniform, + * while 223 is not. + * Given two positive integers a and b, determine the + * number of uniform integers between a and b. + */ +public final class UniformNumbers { + // Private constructor to prevent instantiation of the utility class + private UniformNumbers() { + // Prevent instantiation + } + /** + * This function will find the number of uniform numbers + * from 1 to num + * @param num upper limit to find the uniform numbers + * @return the count of uniform numbers between 1 and num + */ + public static int uniformNumbers(int num) { + String numStr = Integer.toString(num); + int uniformCount = (numStr.length() - 1) * 9; + int finalUniform = Integer.parseInt(String.valueOf(numStr.charAt(0)).repeat(numStr.length())); + + if (finalUniform <= num) { + uniformCount += Integer.parseInt(String.valueOf(numStr.charAt(0))); + } else { + uniformCount += Integer.parseInt(String.valueOf(numStr.charAt(0))) - 1; + } + + return uniformCount; + } + /** + * This function will calculate the number of uniform numbers + * between a and b + * @param a lower bound of range + * @param b upper bound of range + * @return the count of uniform numbers between a and b + */ + public static int countUniformIntegers(int a, int b) { + if (b > a && b > 0 && a > 0) { + return uniformNumbers(b) - uniformNumbers(a - 1); + } else if (b == a) { + return 1; + } else { + return 0; + } + } +} diff --git a/src/test/java/com/thealgorithms/maths/UniformNumbersTest.java b/src/test/java/com/thealgorithms/maths/UniformNumbersTest.java new file mode 100644 index 000000000000..ac46c00014ad --- /dev/null +++ b/src/test/java/com/thealgorithms/maths/UniformNumbersTest.java @@ -0,0 +1,56 @@ +package com.thealgorithms.maths; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +import org.junit.jupiter.api.Test; + +class UniformNumbersTest { + + @Test + void testSingleUniformDigitRange() { + assertEquals(1, UniformNumbers.countUniformIntegers(1, 1)); + assertEquals(9, UniformNumbers.countUniformIntegers(1, 9)); + } + + @Test + void testSmallRange() { + assertEquals(1, UniformNumbers.countUniformIntegers(10, 11)); + assertEquals(2, UniformNumbers.countUniformIntegers(22, 33)); + } + + @Test + void testRangeWithNoUniformNumbers() { + assertEquals(0, UniformNumbers.countUniformIntegers(12, 21)); + assertEquals(0, UniformNumbers.countUniformIntegers(123, 128)); + } + + @Test + void testRangeWithAllUniformNumbers() { + assertEquals(9, UniformNumbers.countUniformIntegers(1, 9)); + assertEquals(18, UniformNumbers.countUniformIntegers(1, 99)); + } + + @Test + void testMultiDigitRangeWithUniformNumbers() { + assertEquals(1, UniformNumbers.countUniformIntegers(100, 111)); + assertEquals(2, UniformNumbers.countUniformIntegers(111, 222)); + } + + @Test + void testExactUniformBoundary() { + assertEquals(1, UniformNumbers.countUniformIntegers(111, 111)); + assertEquals(2, UniformNumbers.countUniformIntegers(111, 222)); + } + + @Test + void testLargeRange() { + assertEquals(27, UniformNumbers.countUniformIntegers(1, 999)); + assertEquals(36, UniformNumbers.countUniformIntegers(1, 9999)); + } + + @Test + void testInvalidRange() { + assertEquals(0, UniformNumbers.countUniformIntegers(500, 100)); + assertEquals(0, UniformNumbers.countUniformIntegers(-100, -1)); + } +} pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy