Skip to content

Commit 37bc5c5

Browse files
committed
feat: add solutions to lc problem: No.2259
No.2259.Remove Digit From Number to Maximize Result
1 parent 685980c commit 37bc5c5

File tree

11 files changed

+220
-55
lines changed

11 files changed

+220
-55
lines changed

solution/1100-1199/1101.The Earliest Moment When Everyone Become Friends/README_EN.md

+2-2
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,7 @@ class Solution:
113113
```java
114114
class Solution {
115115
private int[] p;
116-
116+
117117
public int earliestAcq(int[][] logs, int n) {
118118
Arrays.sort(logs, (a, b) -> a[0] - b[0]);
119119
p = new int[n];
@@ -132,7 +132,7 @@ class Solution {
132132
}
133133
return -1;
134134
}
135-
135+
136136
private int find(int x) {
137137
if (p[x] != x) {
138138
p[x] = find(p[x]);

solution/1600-1699/1616.Split Two Strings to Make Palindrome/README.md

-1
Original file line numberDiff line numberDiff line change
@@ -226,7 +226,6 @@ function checkPalindromeFormation(a: string, b: string): boolean {
226226
};
227227
return check1(a, b) || check1(b, a);
228228
}
229-
230229
```
231230

232231
### **...**

solution/2100-2199/2113.Elements in Array After Removing and Replacing Elements/Solution.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ def elementInNums(self, nums: List[int], queries: List[List[int]]) -> List[int]:
33
n, m = len(nums), len(queries)
44
ans = [-1] * m
55
for j, (t, i) in enumerate(queries):
6-
t %= (2 * n)
6+
t %= 2 * n
77
if t < n and i < n - t:
88
ans[j] = nums[i + t]
99
elif t > n and i < t - n:

solution/2200-2299/2259.Remove Digit From Number to Maximize Result/README.md

+95-10
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,20 @@
5353

5454
<!-- 这里可写通用的实现逻辑 -->
5555

56+
**方法一:暴力枚举**
57+
58+
我们可以枚举字符串 $number$ 的所有位置 $i$,如果 $number[i] = digit$,那么我们取 $number$ 的前缀 $number[0:i]$ 和后缀 $number[i+1:]$ 拼接起来,即为移除 $number[i]$ 后的结果。我们取所有可能的结果中最大的即可。
59+
60+
时间复杂度 $O(n^2)$,空间复杂度 $O(n)$。其中 $n$ 为字符串 $number$ 的长度。
61+
62+
**方法二:贪心**
63+
64+
我们可以枚举字符串 $number$ 的所有位置 $i$,如果 $number[i] = digit$,记录 $digit$ 最后一次出现的位置 $last$,并且如果 $i + 1 \lt n$ 且 $number[i] \lt number[i + 1]$,那么我们可以直接返回 $number[0:i] + number[i+1:]$,即为移除 $number[i]$ 后的结果。这是因为如果 $number[i] < number[i + 1]$,那么移除 $number[i]$ 后,结果一定会更大。
65+
66+
遍历结束,我们返回 $number[0:last] + number[last+1:]$ 即可。
67+
68+
时间复杂度 $O(n)$,空间复杂度 $O(n)$。其中 $n$ 为字符串 $number$ 的长度。
69+
5670
<!-- tabs:start -->
5771

5872
### **Python3**
@@ -67,6 +81,19 @@ class Solution:
6781
)
6882
```
6983

84+
```python
85+
class Solution:
86+
def removeDigit(self, number: str, digit: str) -> str:
87+
last = -1
88+
n = len(number)
89+
for i, d in enumerate(number):
90+
if d == digit:
91+
last = i
92+
if i + 1 < n and d < number[i + 1]:
93+
break
94+
return number[:last] + number[last + 1:]
95+
```
96+
7097
### **Java**
7198

7299
<!-- 这里可写当前语言的特殊实现逻辑 -->
@@ -89,6 +116,25 @@ class Solution {
89116
}
90117
```
91118

119+
```java
120+
class Solution {
121+
public String removeDigit(String number, char digit) {
122+
int last = -1;
123+
int n = number.length();
124+
for (int i = 0; i < n; ++i) {
125+
char d = number.charAt(i);
126+
if (d == digit) {
127+
last = i;
128+
if (i + 1 < n && d < number.charAt(i + 1)) {
129+
break;
130+
}
131+
}
132+
}
133+
return number.substring(0, last) + number.substring(last + 1);
134+
}
135+
}
136+
```
137+
92138
### **C++**
93139

94140
```cpp
@@ -100,14 +146,36 @@ public:
100146
char d = number[i];
101147
if (d == digit) {
102148
string t = number.substr(0, i) + number.substr(i + 1, n - i);
103-
if (ans < t) ans = t;
149+
if (ans < t) {
150+
ans = t;
151+
}
104152
}
105153
}
106154
return ans;
107155
}
108156
};
109157
```
110158
159+
```cpp
160+
class Solution {
161+
public:
162+
string removeDigit(string number, char digit) {
163+
int n = number.size();
164+
int last = -1;
165+
for (int i = 0; i < n; ++i) {
166+
char d = number[i];
167+
if (d == digit) {
168+
last = i;
169+
if (i + 1 < n && number[i] < number[i + 1]) {
170+
break;
171+
}
172+
}
173+
}
174+
return number.substr(0, last) + number.substr(last + 1);
175+
}
176+
};
177+
```
178+
111179
### **Go**
112180

113181
```go
@@ -125,20 +193,37 @@ func removeDigit(number string, digit byte) string {
125193
}
126194
```
127195

196+
```go
197+
func removeDigit(number string, digit byte) string {
198+
last := -1
199+
n := len(number)
200+
for i := range number {
201+
if number[i] == digit {
202+
last = i
203+
if i+1 < n && number[i] < number[i+1] {
204+
break
205+
}
206+
}
207+
}
208+
return number[:last] + number[last+1:]
209+
}
210+
```
211+
128212
### **TypeScript**
129213

130214
```ts
131215
function removeDigit(number: string, digit: string): string {
132-
let nums = number.split('');
133-
const n = nums.length;
134-
let ans = 0;
135-
for (let i = 0; i < n; i++) {
136-
if (nums[i] != digit) continue;
137-
ans = i;
138-
if (i + 1 < n && nums[i + 1] > nums[i]) break;
216+
const n = number.length;
217+
let last = -1;
218+
for (let i = 0; i < n; ++i) {
219+
if (number[i] === digit) {
220+
last = i;
221+
if (i + 1 < n && number[i] < number[i + 1]) {
222+
break;
223+
}
224+
}
139225
}
140-
nums.splice(ans, 1);
141-
return nums.join('');
226+
return number.substring(0, last) + number.substring(last + 1);
142227
}
143228
```
144229

solution/2200-2299/2259.Remove Digit From Number to Maximize Result/README_EN.md

+81-10
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,19 @@ class Solution:
5959
)
6060
```
6161

62+
```python
63+
class Solution:
64+
def removeDigit(self, number: str, digit: str) -> str:
65+
last = -1
66+
n = len(number)
67+
for i, d in enumerate(number):
68+
if d == digit:
69+
last = i
70+
if i + 1 < n and d < number[i + 1]:
71+
break
72+
return number[:last] + number[last + 1:]
73+
```
74+
6275
### **Java**
6376

6477
```java
@@ -79,6 +92,25 @@ class Solution {
7992
}
8093
```
8194

95+
```java
96+
class Solution {
97+
public String removeDigit(String number, char digit) {
98+
int last = -1;
99+
int n = number.length();
100+
for (int i = 0; i < n; ++i) {
101+
char d = number.charAt(i);
102+
if (d == digit) {
103+
last = i;
104+
if (i + 1 < n && d < number.charAt(i + 1)) {
105+
break;
106+
}
107+
}
108+
}
109+
return number.substring(0, last) + number.substring(last + 1);
110+
}
111+
}
112+
```
113+
82114
### **C++**
83115

84116
```cpp
@@ -90,14 +122,36 @@ public:
90122
char d = number[i];
91123
if (d == digit) {
92124
string t = number.substr(0, i) + number.substr(i + 1, n - i);
93-
if (ans < t) ans = t;
125+
if (ans < t) {
126+
ans = t;
127+
}
94128
}
95129
}
96130
return ans;
97131
}
98132
};
99133
```
100134
135+
```cpp
136+
class Solution {
137+
public:
138+
string removeDigit(string number, char digit) {
139+
int n = number.size();
140+
int last = -1;
141+
for (int i = 0; i < n; ++i) {
142+
char d = number[i];
143+
if (d == digit) {
144+
last = i;
145+
if (i + 1 < n && number[i] < number[i + 1]) {
146+
break;
147+
}
148+
}
149+
}
150+
return number.substr(0, last) + number.substr(last + 1);
151+
}
152+
};
153+
```
154+
101155
### **Go**
102156

103157
```go
@@ -115,20 +169,37 @@ func removeDigit(number string, digit byte) string {
115169
}
116170
```
117171

172+
```go
173+
func removeDigit(number string, digit byte) string {
174+
last := -1
175+
n := len(number)
176+
for i := range number {
177+
if number[i] == digit {
178+
last = i
179+
if i+1 < n && number[i] < number[i+1] {
180+
break
181+
}
182+
}
183+
}
184+
return number[:last] + number[last+1:]
185+
}
186+
```
187+
118188
### **TypeScript**
119189

120190
```ts
121191
function removeDigit(number: string, digit: string): string {
122-
let nums = number.split('');
123-
const n = nums.length;
124-
let ans = 0;
125-
for (let i = 0; i < n; i++) {
126-
if (nums[i] != digit) continue;
127-
ans = i;
128-
if (i + 1 < n && nums[i + 1] > nums[i]) break;
192+
const n = number.length;
193+
let last = -1;
194+
for (let i = 0; i < n; ++i) {
195+
if (number[i] === digit) {
196+
last = i;
197+
if (i + 1 < n && number[i] < number[i + 1]) {
198+
break;
199+
}
200+
}
129201
}
130-
nums.splice(ans, 1);
131-
return nums.join('');
202+
return number.substring(0, last) + number.substring(last + 1);
132203
}
133204
```
134205

Original file line numberDiff line numberDiff line change
@@ -1,14 +1,17 @@
11
class Solution {
22
public:
33
string removeDigit(string number, char digit) {
4-
string ans = "0";
5-
for (int i = 0, n = number.size(); i < n; ++i) {
4+
int n = number.size();
5+
int last = -1;
6+
for (int i = 0; i < n; ++i) {
67
char d = number[i];
78
if (d == digit) {
8-
string t = number.substr(0, i) + number.substr(i + 1, n - i);
9-
if (ans < t) ans = t;
9+
last = i;
10+
if (i + 1 < n && number[i] < number[i + 1]) {
11+
break;
12+
}
1013
}
1114
}
12-
return ans;
15+
return number.substr(0, last) + number.substr(last + 1);
1316
}
1417
};
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,13 @@
11
func removeDigit(number string, digit byte) string {
2-
ans := "0"
3-
for i, d := range number {
4-
if d == rune(digit) {
5-
t := number[:i] + number[i+1:]
6-
if strings.Compare(ans, t) < 0 {
7-
ans = t
2+
last := -1
3+
n := len(number)
4+
for i := range number {
5+
if number[i] == digit {
6+
last = i
7+
if i+1 < n && number[i] < number[i+1] {
8+
break
89
}
910
}
1011
}
11-
return ans
12+
return number[:last] + number[last+1:]
1213
}
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,16 @@
11
class Solution {
22
public String removeDigit(String number, char digit) {
3-
String ans = "0";
4-
for (int i = 0, n = number.length(); i < n; ++i) {
3+
int last = -1;
4+
int n = number.length();
5+
for (int i = 0; i < n; ++i) {
56
char d = number.charAt(i);
67
if (d == digit) {
7-
String t = number.substring(0, i) + number.substring(i + 1);
8-
if (ans.compareTo(t) < 0) {
9-
ans = t;
8+
last = i;
9+
if (i + 1 < n && d < number.charAt(i + 1)) {
10+
break;
1011
}
1112
}
1213
}
13-
return ans;
14+
return number.substring(0, last) + number.substring(last + 1);
1415
}
1516
}

0 commit comments

Comments
 (0)