|
@@ -0,0 +1,56 @@
|
|
|
+package main
|
|
|
+
|
|
|
+import (
|
|
|
+ "fmt"
|
|
|
+ "strings"
|
|
|
+)
|
|
|
+
|
|
|
+func main() {
|
|
|
+ var num string
|
|
|
+ var k int
|
|
|
+
|
|
|
+ num = "1432219"
|
|
|
+ k = 3
|
|
|
+ fmt.Println(removeKdigits(num, k))
|
|
|
+
|
|
|
+ num = "10200"
|
|
|
+ k = 1
|
|
|
+ fmt.Println(removeKdigits(num, k))
|
|
|
+
|
|
|
+ num = "10"
|
|
|
+ k = 2
|
|
|
+ fmt.Println(removeKdigits(num, k))
|
|
|
+}
|
|
|
+
|
|
|
+func removeKdigits(num string, k int) string {
|
|
|
+ var count = 0
|
|
|
+ var cursor, zeroIndex = 0, 0
|
|
|
+ for count != k && len(num) > 0 {
|
|
|
+ count++
|
|
|
+ // 删除前置0
|
|
|
+ zeroIndex = 0
|
|
|
+ for num[zeroIndex] == '0' {
|
|
|
+ zeroIndex++
|
|
|
+ }
|
|
|
+ num = num[zeroIndex:]
|
|
|
+
|
|
|
+ // 如果第二个位置为0,去掉第一个数字,可以此时可以同时去掉两位数
|
|
|
+ if len(num) > 1 && num[1]-'0' == 0 {
|
|
|
+ num = num[2:]
|
|
|
+ continue
|
|
|
+ }
|
|
|
+ // 删除第一个最大的数
|
|
|
+ cursor = 0
|
|
|
+ for i := 0; i < len(num); i++ {
|
|
|
+ if num[cursor] > num[i] {
|
|
|
+ break
|
|
|
+ }
|
|
|
+ cursor = i
|
|
|
+ }
|
|
|
+ num = strings.Join(strings.SplitN(num, num[cursor:cursor+1], 2), "")
|
|
|
+ }
|
|
|
+ if num == "" {
|
|
|
+ num = "0"
|
|
|
+ }
|
|
|
+ return num
|
|
|
+}
|