Code to find largest number after removing K digits from a number (#16060)
Co-authored-by: Neetika Khandelwal <kwal.neetika2398@gmail.com>
This commit is contained in:
parent
6c1451dca5
commit
eb3460d9ac
@ -0,0 +1,57 @@
|
|||||||
|
package com.baeldung.algorithms.largestNumberRemovingK;
|
||||||
|
|
||||||
|
import java.util.*;
|
||||||
|
|
||||||
|
public class LargestNumberRemoveKDigits {
|
||||||
|
public static int findLargestNumberUsingArithmetic(int num, int k) {
|
||||||
|
for (int j = 0; j < k; j++) {
|
||||||
|
|
||||||
|
int result = 0;
|
||||||
|
int i = 1;
|
||||||
|
|
||||||
|
while (num / i > 0) {
|
||||||
|
int temp = (num / (i * 10))
|
||||||
|
* i
|
||||||
|
+ (num % i);
|
||||||
|
i *= 10;
|
||||||
|
|
||||||
|
result = Math.max(result, temp);
|
||||||
|
}
|
||||||
|
num = result;
|
||||||
|
}
|
||||||
|
|
||||||
|
return num;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static int findLargestNumberUsingStack(int num, int k) {
|
||||||
|
String numStr = Integer.toString(num);
|
||||||
|
int length = numStr.length();
|
||||||
|
|
||||||
|
if (k == length) return 0;
|
||||||
|
|
||||||
|
Stack<Character> stack = new Stack<>();
|
||||||
|
|
||||||
|
for (int i = 0; i < length; i++) {
|
||||||
|
char digit = numStr.charAt(i);
|
||||||
|
|
||||||
|
while (k > 0 && !stack.isEmpty() && stack.peek() < digit) {
|
||||||
|
stack.pop();
|
||||||
|
k--;
|
||||||
|
}
|
||||||
|
|
||||||
|
stack.push(digit);
|
||||||
|
}
|
||||||
|
|
||||||
|
while (k > 0) {
|
||||||
|
stack.pop();
|
||||||
|
k--;
|
||||||
|
}
|
||||||
|
|
||||||
|
StringBuilder result = new StringBuilder();
|
||||||
|
while (!stack.isEmpty()) {
|
||||||
|
result.insert(0, stack.pop());
|
||||||
|
}
|
||||||
|
|
||||||
|
return Integer.parseInt(result.toString());
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,25 @@
|
|||||||
|
package com.baeldung.algorithms.largestNumberRemovingK;
|
||||||
|
|
||||||
|
import org.junit.jupiter.api.Assertions;
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
|
||||||
|
public class LargestNumberRemoveKDigitsUnitTest {
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void givenNumber_UsingArithmeticRemoveKDigits_thenReturnLargestNumber(){
|
||||||
|
Assertions.assertEquals(LargestNumberRemoveKDigits.findLargestNumberUsingArithmetic(9461, 1), 961);
|
||||||
|
Assertions.assertEquals(LargestNumberRemoveKDigits.findLargestNumberUsingArithmetic(463, 2), 6);
|
||||||
|
Assertions.assertEquals(LargestNumberRemoveKDigits.findLargestNumberUsingArithmetic(98625410, 6), 98);
|
||||||
|
Assertions.assertEquals(LargestNumberRemoveKDigits.findLargestNumberUsingArithmetic(20, 2), 0);
|
||||||
|
Assertions.assertEquals(LargestNumberRemoveKDigits.findLargestNumberUsingArithmetic(98989, 4), 9);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void givenNumber_UsingStackRemoveKDigits_thenReturnLargestNumber(){
|
||||||
|
Assertions.assertEquals(LargestNumberRemoveKDigits.findLargestNumberUsingStack(9461, 1), 961);
|
||||||
|
Assertions.assertEquals(LargestNumberRemoveKDigits.findLargestNumberUsingStack(463, 2), 6);
|
||||||
|
Assertions.assertEquals(LargestNumberRemoveKDigits.findLargestNumberUsingStack(98625410, 6), 98);
|
||||||
|
Assertions.assertEquals(LargestNumberRemoveKDigits.findLargestNumberUsingStack(20, 2), 0);
|
||||||
|
Assertions.assertEquals(LargestNumberRemoveKDigits.findLargestNumberUsingStack(98989, 4), 9);
|
||||||
|
}
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user