p402

LeetCode p402 Remove K Digits 题解

1.题目:

Given a non-negative integer num represented as a string, remove k digits from the number so that the new number is the smallest possible.

Note:
The length of num is less than 10002 and will be ≥ k.
The given num does not contain any leading zero.
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.

题意:

输入一个数字的字符串,和K,移除K个数字之后使得到的字符串表示的数字最小,输出这个最小的数字。

2.解题思路:

将每个数与它前面的数进行比较,如果比前面的数大就将前面的数移除。
比如897321 K=3
则移除顺序为 8 9 比较 不移除进位
9 7 比较 9 移除 退位
8 7 比较 8 移除 无法退位
7 3 比较 3 移除 退出循环

3.代码


[title] [] [url] [link text]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
 
public class Solution {
public String removeKdigits(String num, int k) {
StringBuilder sBuilder = new StringBuilder(num);
int x = 1;
for (int i = 0; i < k;) {

if (sBuilder.length() == 1)
return "0";
if (x >= sBuilder.length()
|| sBuilder.charAt(x - 1) > sBuilder.charAt(x)) {
sBuilder.deleteCharAt(x - 1);
i++;
if (x != 1)
x--;
} else {
x++;
}
}
x = 0;
for (; x < sBuilder.length();) {
if (sBuilder.charAt(x) != '0' || sBuilder.length() < 2)
break;
if (sBuilder.charAt(x) == '0') {
sBuilder.deleteCharAt(x);
} else {
x++;
}
}
return sBuilder.toString();

}
}

4.一些总结: