Browse Source

add 'Remove K Digits'

tangs 5 năm trước cách đây
mục cha
commit
9528b15030
1 tập tin đã thay đổi với 56 bổ sung0 xóa
  1. 56 0
      tags/greedy/removeKDigits/main.go

+ 56 - 0
tags/greedy/removeKDigits/main.go

@@ -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
+}