JIAKAOBO

LeetCode

venmo
wechat

感谢赞助!

  • ㊗️
  • 大家
  • offer
  • 多多!

Problem

Given string num representing a non-negative integer num, and an integer k, return the smallest possible integer after removing k digits from num.

Example 1:

Input: num = "1432219", k = 3
Output: "1219"
Explanation: Remove the three digits 4, 3, and 2 to form the new number 1219 which is the smallest.

Example 2:

Input: num = "10200", k = 1
Output: "200"
Explanation: Remove the leading 1 and the number is 200. Note that the output must not contain leading zeroes.

Example 3:

Input: num = "10", k = 2
Output: "0"
Explanation: Remove all the digits from the number and it is left with nothing which is 0.

Code

class Solution {
    public String removeKdigits(String num, int k) {
        if(num.length() <= k) return "0";
        
        Stack<Integer> stack = new Stack<>();

        for(int i = 0; i < num.length(); i++){
            int temp = num.charAt(i) - '0';
            while(!stack.isEmpty() && k > 0 && stack.peek() > temp){
                stack.pop();
                k--;
            }
            
            stack.push(temp);
        }
        
        // 排除剩余的数字
        while(k > 0){
            stack.pop();
            k--;
        }
        
        StringBuilder sb = new StringBuilder();
        while(!stack.isEmpty()){
            sb.append(stack.pop());
        }
        
        sb.reverse();
        
        while(sb.length() != 0 && sb.charAt(0) == '0'){
            sb.deleteCharAt(0);
        }
        
        
        return sb.length() == 0 ? "0" : sb.toString();
    }
}