Skip to content

Commit 8517a63

Browse files
authored
feat: add solutions to lc problem: No.3758 (#4860)
1 parent 435295b commit 8517a63

File tree

7 files changed

+353
-8
lines changed

7 files changed

+353
-8
lines changed

solution/3700-3799/3758.Convert Number Words to Digits/README.md

Lines changed: 122 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -103,32 +103,150 @@ edit_url: https://github.com/doocs/leetcode/edit/main/solution/3700-3799/3758.Co
103103

104104
<!-- solution:start -->
105105

106-
### 方法一
106+
### 方法一:枚举
107+
108+
我们首先将数字单词与对应的数字建立映射关系,记录在数组 $d$ 中,其中 $d[i]$ 表示数字 $i$ 对应的单词。
109+
110+
然后我们从左到右遍历字符串 $s$,对于每个位置 $i$,我们依次枚举数字单词 $d[j]$,判断从位置 $i$ 开始的子串是否与 $d[j]$ 匹配。如果匹配成功,则将数字 $j$ 添加到结果中,并将位置 $i$ 向后移动 $|d[j]|$ 个位置。否则,将位置 $i$ 向后移动 1 个位置。
111+
112+
我们重复上述过程,直到遍历完整个字符串 $s$。最后将结果中的数字连接成字符串并返回。
113+
114+
时间复杂度 $O(n \times |d|)$,空间复杂度 $O(|d|)$,其中 $n$ 是字符串 $s$ 的长度,而 $|d|$ 是数字单词的数量。
107115

108116
<!-- tabs:start -->
109117

110118
#### Python3
111119

112120
```python
113-
121+
class Solution:
122+
def convertNumber(self, s: str) -> str:
123+
d = [
124+
"zero",
125+
"one",
126+
"two",
127+
"three",
128+
"four",
129+
"five",
130+
"six",
131+
"seven",
132+
"eight",
133+
"nine",
134+
]
135+
i, n = 0, len(s)
136+
ans = []
137+
while i < n:
138+
for j, t in enumerate(d):
139+
m = len(t)
140+
if i + m <= n and s[i : i + m] == t:
141+
ans.append(str(j))
142+
i += m - 1
143+
break
144+
i += 1
145+
return "".join(ans)
114146
```
115147

116148
#### Java
117149

118150
```java
119-
151+
class Solution {
152+
public String convertNumber(String s) {
153+
String[] d
154+
= {"zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"};
155+
int n = s.length();
156+
StringBuilder ans = new StringBuilder();
157+
for (int i = 0; i < n; ++i) {
158+
for (int j = 0; j < d.length; ++j) {
159+
String t = d[j];
160+
int m = t.length();
161+
if (i + m <= n && s.substring(i, i + m).equals(t)) {
162+
ans.append(j);
163+
i += m - 1;
164+
break;
165+
}
166+
}
167+
}
168+
return ans.toString();
169+
}
170+
}
120171
```
121172

122173
#### C++
123174

124175
```cpp
125-
176+
class Solution {
177+
public:
178+
string convertNumber(string s) {
179+
vector<string> d = {"zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"};
180+
int n = s.length();
181+
string ans;
182+
for (int i = 0; i < n; ++i) {
183+
for (int j = 0; j < d.size(); ++j) {
184+
string t = d[j];
185+
int m = t.length();
186+
if (i + m <= n && s.substr(i, m) == t) {
187+
ans += to_string(j);
188+
i += m - 1;
189+
break;
190+
}
191+
}
192+
}
193+
return ans;
194+
}
195+
};
126196
```
127197
128198
#### Go
129199
130200
```go
201+
func convertNumber(s string) string {
202+
d := []string{"zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"}
203+
n := len(s)
204+
var ans strings.Builder
205+
for i := 0; i < n; i++ {
206+
for j, t := range d {
207+
m := len(t)
208+
if i+m <= n && s[i:i+m] == t {
209+
ans.WriteString(strconv.Itoa(j))
210+
i += m - 1
211+
break
212+
}
213+
}
214+
}
215+
return ans.String()
216+
}
217+
```
131218

219+
#### TypeScript
220+
221+
```ts
222+
function convertNumber(s: string): string {
223+
const d: string[] = [
224+
'zero',
225+
'one',
226+
'two',
227+
'three',
228+
'four',
229+
'five',
230+
'six',
231+
'seven',
232+
'eight',
233+
'nine',
234+
];
235+
const n = s.length;
236+
const ans: string[] = [];
237+
for (let i = 0; i < n; ++i) {
238+
for (let j = 0; j < d.length; ++j) {
239+
const t = d[j];
240+
const m = t.length;
241+
if (i + m <= n && s.substring(i, i + m) === t) {
242+
ans.push(j.toString());
243+
i += m - 1;
244+
break;
245+
}
246+
}
247+
}
248+
return ans.join('');
249+
}
132250
```
133251

134252
<!-- tabs:end -->

solution/3700-3799/3758.Convert Number Words to Digits/README_EN.md

Lines changed: 122 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -103,32 +103,150 @@ edit_url: https://github.com/doocs/leetcode/edit/main/solution/3700-3799/3758.Co
103103

104104
<!-- solution:start -->
105105

106-
### Solution 1
106+
### Solution 1: Enumeration
107+
108+
We first establish a mapping relationship between number words and their corresponding digits, recorded in array $d$, where $d[i]$ represents the word corresponding to digit $i$.
109+
110+
Then we traverse the string $s$ from left to right. For each position $i$, we enumerate the number words $d[j]$ in order and check whether the substring starting from position $i$ matches $d[j]$. If a match is found, we add digit $j$ to the result and move position $i$ forward by $|d[j]|$ positions. Otherwise, we move position $i$ forward by 1 position.
111+
112+
We repeat this process until we have traversed the entire string $s$. Finally, we concatenate the digits in the result into a string and return it.
113+
114+
The time complexity is $O(n \times |d|)$ and the space complexity is $O(|d|)$, where $n$ is the length of string $s$ and $|d|$ is the number of digit words.
107115

108116
<!-- tabs:start -->
109117

110118
#### Python3
111119

112120
```python
113-
121+
class Solution:
122+
def convertNumber(self, s: str) -> str:
123+
d = [
124+
"zero",
125+
"one",
126+
"two",
127+
"three",
128+
"four",
129+
"five",
130+
"six",
131+
"seven",
132+
"eight",
133+
"nine",
134+
]
135+
i, n = 0, len(s)
136+
ans = []
137+
while i < n:
138+
for j, t in enumerate(d):
139+
m = len(t)
140+
if i + m <= n and s[i : i + m] == t:
141+
ans.append(str(j))
142+
i += m - 1
143+
break
144+
i += 1
145+
return "".join(ans)
114146
```
115147

116148
#### Java
117149

118150
```java
119-
151+
class Solution {
152+
public String convertNumber(String s) {
153+
String[] d
154+
= {"zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"};
155+
int n = s.length();
156+
StringBuilder ans = new StringBuilder();
157+
for (int i = 0; i < n; ++i) {
158+
for (int j = 0; j < d.length; ++j) {
159+
String t = d[j];
160+
int m = t.length();
161+
if (i + m <= n && s.substring(i, i + m).equals(t)) {
162+
ans.append(j);
163+
i += m - 1;
164+
break;
165+
}
166+
}
167+
}
168+
return ans.toString();
169+
}
170+
}
120171
```
121172

122173
#### C++
123174

124175
```cpp
125-
176+
class Solution {
177+
public:
178+
string convertNumber(string s) {
179+
vector<string> d = {"zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"};
180+
int n = s.length();
181+
string ans;
182+
for (int i = 0; i < n; ++i) {
183+
for (int j = 0; j < d.size(); ++j) {
184+
string t = d[j];
185+
int m = t.length();
186+
if (i + m <= n && s.substr(i, m) == t) {
187+
ans += to_string(j);
188+
i += m - 1;
189+
break;
190+
}
191+
}
192+
}
193+
return ans;
194+
}
195+
};
126196
```
127197
128198
#### Go
129199
130200
```go
201+
func convertNumber(s string) string {
202+
d := []string{"zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"}
203+
n := len(s)
204+
var ans strings.Builder
205+
for i := 0; i < n; i++ {
206+
for j, t := range d {
207+
m := len(t)
208+
if i+m <= n && s[i:i+m] == t {
209+
ans.WriteString(strconv.Itoa(j))
210+
i += m - 1
211+
break
212+
}
213+
}
214+
}
215+
return ans.String()
216+
}
217+
```
131218

219+
#### TypeScript
220+
221+
```ts
222+
function convertNumber(s: string): string {
223+
const d: string[] = [
224+
'zero',
225+
'one',
226+
'two',
227+
'three',
228+
'four',
229+
'five',
230+
'six',
231+
'seven',
232+
'eight',
233+
'nine',
234+
];
235+
const n = s.length;
236+
const ans: string[] = [];
237+
for (let i = 0; i < n; ++i) {
238+
for (let j = 0; j < d.length; ++j) {
239+
const t = d[j];
240+
const m = t.length;
241+
if (i + m <= n && s.substring(i, i + m) === t) {
242+
ans.push(j.toString());
243+
i += m - 1;
244+
break;
245+
}
246+
}
247+
}
248+
return ans.join('');
249+
}
132250
```
133251

134252
<!-- tabs:end -->
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
class Solution {
2+
public:
3+
string convertNumber(string s) {
4+
vector<string> d = {"zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"};
5+
int n = s.length();
6+
string ans;
7+
for (int i = 0; i < n; ++i) {
8+
for (int j = 0; j < d.size(); ++j) {
9+
string t = d[j];
10+
int m = t.length();
11+
if (i + m <= n && s.substr(i, m) == t) {
12+
ans += to_string(j);
13+
i += m - 1;
14+
break;
15+
}
16+
}
17+
}
18+
return ans;
19+
}
20+
};
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
func convertNumber(s string) string {
2+
d := []string{"zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"}
3+
n := len(s)
4+
var ans strings.Builder
5+
for i := 0; i < n; i++ {
6+
for j, t := range d {
7+
m := len(t)
8+
if i+m <= n && s[i:i+m] == t {
9+
ans.WriteString(strconv.Itoa(j))
10+
i += m - 1
11+
break
12+
}
13+
}
14+
}
15+
return ans.String()
16+
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
class Solution {
2+
public String convertNumber(String s) {
3+
String[] d
4+
= {"zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"};
5+
int n = s.length();
6+
StringBuilder ans = new StringBuilder();
7+
for (int i = 0; i < n; ++i) {
8+
for (int j = 0; j < d.length; ++j) {
9+
String t = d[j];
10+
int m = t.length();
11+
if (i + m <= n && s.substring(i, i + m).equals(t)) {
12+
ans.append(j);
13+
i += m - 1;
14+
break;
15+
}
16+
}
17+
}
18+
return ans.toString();
19+
}
20+
}
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
class Solution:
2+
def convertNumber(self, s: str) -> str:
3+
d = [
4+
"zero",
5+
"one",
6+
"two",
7+
"three",
8+
"four",
9+
"five",
10+
"six",
11+
"seven",
12+
"eight",
13+
"nine",
14+
]
15+
i, n = 0, len(s)
16+
ans = []
17+
while i < n:
18+
for j, t in enumerate(d):
19+
m = len(t)
20+
if i + m <= n and s[i : i + m] == t:
21+
ans.append(str(j))
22+
i += m - 1
23+
break
24+
i += 1
25+
return "".join(ans)

0 commit comments

Comments
 (0)