LeetCode402. Remove K Digits
2019-05-22 本文已影响0人
24K纯帅豆
1、题目链接
https://leetcode.com/problems/remove-k-digits/
2、解题思路
题目是说给你一个数字字符串num,然后再给你一个数K,让你移除字符串num中的K个字符,让剩下的字符串转成数字之后最小,想要数字最小,那么我们就尽可能的移除掉左边(相对位置)的大数,这样剩下的才会最小,好像貌似大概又有点贪心的思想在里面,而且这种很明确的比较某些位置字符大小的,我们可以借助一个栈来实现,遍历整个字符串,当栈为空的时候将字符入栈,不为空的时候我们取栈顶元素和即将要入栈的元素进行比较,如果栈顶元素较大,那么可以让当前的栈顶元素出栈,然后继续和栈顶元素比较,否则的话将该元素入栈,直到遍历结束。
3、代码
- Java
public static String removeKdigits(String num, int k) {
if (num.length() == k) {
return "0";
}
StringBuilder sb = new StringBuilder();
Stack<Character> chStack = new Stack<>();
for (int i = 0; i < num.length(); i++) {
while (!chStack.isEmpty() && chStack.peek() > num.charAt(i) && k > 0) {
chStack.pop();
k--;
}
chStack.push(num.charAt(i));
}
while (!chStack.isEmpty()) {
if (k > 0) {
chStack.pop();
k--;
continue;
}
sb.append(chStack.pop());
}
String result = sb.reverse().toString();
if (result.length() == 0) {
return "0";
}
int cnt = 0;
while (cnt < result.length() && result.charAt(cnt) == '0') {
cnt++;
}
return cnt == result.length() ? "0" : result.substring(cnt);
}
- Python
由于太忙,后续补上
- JavaScript
由于太忙,后续补上
4、提交结果
