2021.05.04移掉k个数字求最小数字
( 题目来源:https://leetcode-cn.com/problems/remove-k-digits/ )
题目描述
给定一个以字符串表示的非负整数 num,移除这个数中的 k 位数字,使得剩下的数字最小。
数据规模和约定
num 的长度小于 10002 且 ≥ k。
num 不会包含任何前导零。
思路
其实这是一道贪心题,但还是根据之前的笔记记录:
- 将“移除k个数字”转换成“选取 len-k个数字”。
- 先选位数高的。
- 每次选数字的区间有一定的限制:
假设在长度为N的数字中选取K个数字
(1)第一次选择:
(2)之后选择:
还需要写代码去除前导0.
代码
public String removeKdigits(String num, int k) {
if(num.length() == k) return "0";
String res = helper(num,num.length()-k);
//System.out.println(res);
StringBuffer sb = new StringBuffer();
boolean isHead = true;
for(int i = 0; i < res.length(); i++) {
if(res.charAt(i) == '0' && isHead == true) {
continue;
} else {
isHead = false;
sb.append(res.charAt(i));
}
}
return sb.length()==0? "0": sb.toString();
}
public String helper(String num, int k) {
String res = "";
int left = 0;
int right = num.length()-k+1;
for(int z = 0; z < k; z++) { //取k次
char min = num.charAt(left);
left++;
for(int i = left; i < right; i++) {
if(num.charAt(i) < min) {
min = num.charAt(i);
left = i+1;
}
}
right++;
res = res+min;
}
return res;
}