给定一个以字符串表示的非负整数 num,移除这个数中的 k 位数字,使得剩下的数字最小。
注意:
num 的长度小于 10002 且 ≥ k。
num 不会包含任何前导零。
示例 1 :
输入: num = “1432219”, k = 3
输出: “1219”
解释: 移除掉三个数字 4, 3, 和 2 形成一个新的最小的数字 1219。
代码
class Solution {public String removeKdigits(String num, int k) {StringBuilder stringBuilder=new StringBuilder();int n=num.length();if(k>=n) return "0";int target=n-k-1;int pre=0;//记录上个选择数字的位置for(int i=0;i<n-k;i++,target--){int loc=pre;for(int j=pre+1;j<=n-target-1;j++)//在可选择的范围内选择最小的数字if(num.charAt(j)<num.charAt(loc)){loc=j;}pre=loc+1;stringBuilder.append(num.charAt(loc));}while (stringBuilder.length()>1&&stringBuilder.charAt(0)=='0')//去除前导0stringBuilder.deleteCharAt(0);return stringBuilder.toString();}
}