|
69 | 69 | ```python
|
70 | 70 | class Solution:
|
71 | 71 | def removeKdigits(self, num: str, k: int) -> str:
|
72 |
| - stack, remain = [], len(num)-k |
73 |
| - for value in num: |
74 |
| - while k and stack and stack[-1] > value: |
75 |
| - k = k-1 |
76 |
| - stack.pop() |
77 |
| - stack.append(value) |
78 |
| - return "".join(stack[:remain]).lstrip('0') or '0' |
| 72 | + stk = [] |
| 73 | + remain = len(num) - k |
| 74 | + for c in num: |
| 75 | + while k and stk and stk[-1] > c: |
| 76 | + stk.pop() |
| 77 | + k -= 1 |
| 78 | + stk.append(c) |
| 79 | + return ''.join(stk[:remain]).lstrip('0') or '0' |
79 | 80 | ```
|
80 | 81 |
|
81 |
| -### **Go** |
| 82 | +### **Java** |
| 83 | + |
| 84 | +```java |
| 85 | +class Solution { |
| 86 | + public String removeKdigits(String num, int k) { |
| 87 | + StringBuilder stk = new StringBuilder(); |
| 88 | + for (char c : num.toCharArray()) { |
| 89 | + while (k > 0 && stk.length() > 0 && stk.charAt(stk.length() - 1) > c) { |
| 90 | + stk.deleteCharAt(stk.length() - 1); |
| 91 | + --k; |
| 92 | + } |
| 93 | + stk.append(c); |
| 94 | + } |
| 95 | + for (; k > 0; --k) { |
| 96 | + stk.deleteCharAt(stk.length() - 1); |
| 97 | + } |
| 98 | + int i = 0; |
| 99 | + for (; i < stk.length() && stk.charAt(i) == '0'; ++i) { |
82 | 100 |
|
83 |
| -<!-- 这里可写当前语言的特殊实现逻辑 --> |
| 101 | + } |
| 102 | + String ans = stk.substring(i); |
| 103 | + return "".equals(ans) ? "0" : ans; |
| 104 | + } |
| 105 | +} |
| 106 | +``` |
| 107 | + |
| 108 | +### **C++** |
| 109 | + |
| 110 | +```cpp |
| 111 | +class Solution { |
| 112 | +public: |
| 113 | + string removeKdigits(string num, int k) { |
| 114 | + string stk; |
| 115 | + for (char& c : num) { |
| 116 | + while (k && stk.size() && stk.back() > c) { |
| 117 | + stk.pop_back(); |
| 118 | + --k; |
| 119 | + } |
| 120 | + stk += c; |
| 121 | + } |
| 122 | + while (k--) { |
| 123 | + stk.pop_back(); |
| 124 | + } |
| 125 | + int i = 0; |
| 126 | + for (; i < stk.size() && stk[i] == '0'; ++i) { |
| 127 | + |
| 128 | + } |
| 129 | + string ans = stk.substr(i); |
| 130 | + return ans == "" ? "0" : ans; |
| 131 | + } |
| 132 | +}; |
| 133 | +``` |
| 134 | + |
| 135 | +### **Go** |
84 | 136 |
|
85 | 137 | ```go
|
86 | 138 | func removeKdigits(num string, k int) string {
|
87 |
| - stack, remain := make([]byte, 0), len(num)-k |
| 139 | + stk, remain := make([]byte, 0), len(num)-k |
88 | 140 | for i := 0; i < len(num); i++ {
|
89 |
| - n := len(stack) |
90 |
| - for k > 0 && n > 0 && stack[n-1] > num[i] { |
91 |
| - stack = stack[:n-1] |
| 141 | + n := len(stk) |
| 142 | + for k > 0 && n > 0 && stk[n-1] > num[i] { |
| 143 | + stk = stk[:n-1] |
92 | 144 | n, k = n-1, k-1
|
93 | 145 | }
|
94 |
| - stack = append(stack, num[i]) |
| 146 | + stk = append(stk, num[i]) |
95 | 147 | }
|
96 |
| - // 返回删除 k 个字符之后的字符串,需要去除可能存在的前置 0 |
97 |
| - for i := 0; i < len(stack) && i < remain; i++ { |
98 |
| - if stack[i] != '0' { |
99 |
| - return string(stack[i:remain]) |
| 148 | + |
| 149 | + for i := 0; i < len(stk) && i < remain; i++ { |
| 150 | + if stk[i] != '0' { |
| 151 | + return string(stk[i:remain]) |
100 | 152 | }
|
101 | 153 | }
|
102 | 154 | return "0"
|
|
0 commit comments