Solution.java 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. package _402;
  2. class Solution {
  3. public String removeKdigits(String num, int k) {
  4. if (k <= 0)
  5. return num;
  6. int len = num.length();
  7. StringBuilder res = new StringBuilder(len);
  8. return removeKdigitsIter(num, len - k, -1, res);
  9. }
  10. /**
  11. * @param left Number of the digits left
  12. * @param head The head index of current sub string
  13. * @param res Temp sb to build result
  14. */
  15. private String removeKdigitsIter(String num, int left, int head, StringBuilder res) {
  16. if (left <= 0)
  17. return res.length() == 0 ? "0" : res.toString();
  18. head++;
  19. char min = num.charAt(head);
  20. int tail = num.length() - left + 1;
  21. for (int i = head; i < tail; i++) {
  22. if (num.charAt(i) < min) {
  23. min = num.charAt(i);
  24. head = i;
  25. }
  26. }
  27. boolean notLeading0 = res.length() != 0 || min != '0';
  28. if (notLeading0)
  29. res.append(min);
  30. return removeKdigitsIter(num, left - 1, head, res);
  31. }
  32. private static void testRemoveKdigits(String num, int k) {
  33. Solution solution = new Solution();
  34. System.out.println(solution.removeKdigits(num, k));
  35. }
  36. public static void main(String[] args) {
  37. testRemoveKdigits("4325643", 0);
  38. }
  39. }