Skip to content

Commit a7eb309

Browse files
committed
feat: add solutions to lc problem: No.1694
No.1694.Reformat Phone Number
1 parent 78788f7 commit a7eb309

File tree

6 files changed

+249
-2
lines changed

6 files changed

+249
-2
lines changed

solution/1600-1699/1694.Reformat Phone Number/README.md

Lines changed: 94 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -87,22 +87,115 @@
8787

8888
<!-- 这里可写通用的实现逻辑 -->
8989

90+
**方法一:简单模拟**
91+
92+
先按照题意,去除字符串中的所有空格和破折号。
93+
94+
记当前字符串长度为 $n$,然后从前往后遍历字符串,每 $3$ 个字符为一组,将其加入结果字符串中,共取 $n / 3$ 组。
95+
96+
若最后剩余 $1$ 个字符,则将前面的最后一组的最后一个字符与该字符组成一个新的两个字符的组,加入结果字符串中;若最后剩余 $2$ 个字符,直接将这连个字符组成一个新的组,加入结果字符串中。
97+
98+
最后将所有组之间加上破折号,返回结果字符串即可。
99+
100+
时间复杂度 $O(n)$。
101+
90102
<!-- tabs:start -->
91103

92104
### **Python3**
93105

94106
<!-- 这里可写当前语言的特殊实现逻辑 -->
95107

96108
```python
97-
109+
class Solution:
110+
def reformatNumber(self, number: str) -> str:
111+
number = number.replace("-", "").replace(" ", "")
112+
n = len(number)
113+
ans = [number[i * 3 : i * 3 + 3] for i in range(n // 3)]
114+
if n % 3 == 1:
115+
ans[-1] = ans[-1][:2]
116+
ans.append(number[-2:])
117+
elif n % 3 == 2:
118+
ans.append(number[-2:])
119+
return "-".join(ans)
98120
```
99121

100122
### **Java**
101123

102124
<!-- 这里可写当前语言的特殊实现逻辑 -->
103125

104126
```java
127+
class Solution {
128+
public String reformatNumber(String number) {
129+
number = number.replace("-", "").replace(" ", "");
130+
int n = number.length();
131+
List<String> ans = new ArrayList<>();
132+
for (int i = 0; i < n / 3; ++i) {
133+
ans.add(number.substring(i * 3, i * 3 + 3));
134+
}
135+
if (n % 3 == 1) {
136+
ans.set(ans.size() - 1, ans.get(ans.size() - 1).substring(0, 2));
137+
ans.add(number.substring(n - 2));
138+
} else if (n % 3 == 2) {
139+
ans.add(number.substring(n - 2));
140+
}
141+
return String.join("-", ans);
142+
}
143+
}
144+
```
145+
146+
### **C++**
147+
148+
```cpp
149+
class Solution {
150+
public:
151+
string reformatNumber(string number) {
152+
string s;
153+
for (char c : number) {
154+
if (c != ' ' && c != '-') {
155+
s.push_back(c);
156+
}
157+
}
158+
int n = s.size();
159+
vector<string> res;
160+
for (int i = 0; i < n / 3; ++i) {
161+
res.push_back(s.substr(i * 3, 3));
162+
}
163+
if (n % 3 == 1) {
164+
res.back() = res.back().substr(0, 2);
165+
res.push_back(s.substr(n - 2));
166+
} else if (n % 3 == 2) {
167+
res.push_back(s.substr(n - 2));
168+
}
169+
string ans;
170+
for (auto& v : res) {
171+
ans += v;
172+
ans += "-";
173+
}
174+
ans.pop_back();
175+
return ans;
176+
}
177+
};
178+
```
105179
180+
### **Go**
181+
182+
```go
183+
func reformatNumber(number string) string {
184+
number = strings.ReplaceAll(number, " ", "")
185+
number = strings.ReplaceAll(number, "-", "")
186+
n := len(number)
187+
ans := []string{}
188+
for i := 0; i < n/3; i++ {
189+
ans = append(ans, number[i*3:i*3+3])
190+
}
191+
if n%3 == 1 {
192+
ans[len(ans)-1] = ans[len(ans)-1][:2]
193+
ans = append(ans, number[n-2:])
194+
} else if n%3 == 2 {
195+
ans = append(ans, number[n-2:])
196+
}
197+
return strings.Join(ans, "-")
198+
}
106199
```
107200

108201
### **...**

solution/1600-1699/1694.Reformat Phone Number/README_EN.md

Lines changed: 82 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,13 +69,94 @@ Joining the blocks gives &quot;123-456-78&quot;.
6969
### **Python3**
7070

7171
```python
72-
72+
class Solution:
73+
def reformatNumber(self, number: str) -> str:
74+
number = number.replace("-", "").replace(" ", "")
75+
n = len(number)
76+
ans = [number[i * 3 : i * 3 + 3] for i in range(n // 3)]
77+
if n % 3 == 1:
78+
ans[-1] = ans[-1][:2]
79+
ans.append(number[-2:])
80+
elif n % 3 == 2:
81+
ans.append(number[-2:])
82+
return "-".join(ans)
7383
```
7484

7585
### **Java**
7686

7787
```java
88+
class Solution {
89+
public String reformatNumber(String number) {
90+
number = number.replace("-", "").replace(" ", "");
91+
int n = number.length();
92+
List<String> ans = new ArrayList<>();
93+
for (int i = 0; i < n / 3; ++i) {
94+
ans.add(number.substring(i * 3, i * 3 + 3));
95+
}
96+
if (n % 3 == 1) {
97+
ans.set(ans.size() - 1, ans.get(ans.size() - 1).substring(0, 2));
98+
ans.add(number.substring(n - 2));
99+
} else if (n % 3 == 2) {
100+
ans.add(number.substring(n - 2));
101+
}
102+
return String.join("-", ans);
103+
}
104+
}
105+
```
106+
107+
### **C++**
108+
109+
```cpp
110+
class Solution {
111+
public:
112+
string reformatNumber(string number) {
113+
string s;
114+
for (char c : number) {
115+
if (c != ' ' && c != '-') {
116+
s.push_back(c);
117+
}
118+
}
119+
int n = s.size();
120+
vector<string> res;
121+
for (int i = 0; i < n / 3; ++i) {
122+
res.push_back(s.substr(i * 3, 3));
123+
}
124+
if (n % 3 == 1) {
125+
res.back() = res.back().substr(0, 2);
126+
res.push_back(s.substr(n - 2));
127+
} else if (n % 3 == 2) {
128+
res.push_back(s.substr(n - 2));
129+
}
130+
string ans;
131+
for (auto& v : res) {
132+
ans += v;
133+
ans += "-";
134+
}
135+
ans.pop_back();
136+
return ans;
137+
}
138+
};
139+
```
78140
141+
### **Go**
142+
143+
```go
144+
func reformatNumber(number string) string {
145+
number = strings.ReplaceAll(number, " ", "")
146+
number = strings.ReplaceAll(number, "-", "")
147+
n := len(number)
148+
ans := []string{}
149+
for i := 0; i < n/3; i++ {
150+
ans = append(ans, number[i*3:i*3+3])
151+
}
152+
if n%3 == 1 {
153+
ans[len(ans)-1] = ans[len(ans)-1][:2]
154+
ans = append(ans, number[n-2:])
155+
} else if n%3 == 2 {
156+
ans = append(ans, number[n-2:])
157+
}
158+
return strings.Join(ans, "-")
159+
}
79160
```
80161

81162
### **...**
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
class Solution {
2+
public:
3+
string reformatNumber(string number) {
4+
string s;
5+
for (char c : number) {
6+
if (c != ' ' && c != '-') {
7+
s.push_back(c);
8+
}
9+
}
10+
int n = s.size();
11+
vector<string> res;
12+
for (int i = 0; i < n / 3; ++i) {
13+
res.push_back(s.substr(i * 3, 3));
14+
}
15+
if (n % 3 == 1) {
16+
res.back() = res.back().substr(0, 2);
17+
res.push_back(s.substr(n - 2));
18+
} else if (n % 3 == 2) {
19+
res.push_back(s.substr(n - 2));
20+
}
21+
string ans;
22+
for (auto& v : res) {
23+
ans += v;
24+
ans += "-";
25+
}
26+
ans.pop_back();
27+
return ans;
28+
}
29+
};
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
func reformatNumber(number string) string {
2+
number = strings.ReplaceAll(number, " ", "")
3+
number = strings.ReplaceAll(number, "-", "")
4+
n := len(number)
5+
ans := []string{}
6+
for i := 0; i < n/3; i++ {
7+
ans = append(ans, number[i*3:i*3+3])
8+
}
9+
if n%3 == 1 {
10+
ans[len(ans)-1] = ans[len(ans)-1][:2]
11+
ans = append(ans, number[n-2:])
12+
} else if n%3 == 2 {
13+
ans = append(ans, number[n-2:])
14+
}
15+
return strings.Join(ans, "-")
16+
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
class Solution {
2+
public String reformatNumber(String number) {
3+
number = number.replace("-", "").replace(" ", "");
4+
int n = number.length();
5+
List<String> ans = new ArrayList<>();
6+
for (int i = 0; i < n / 3; ++i) {
7+
ans.add(number.substring(i * 3, i * 3 + 3));
8+
}
9+
if (n % 3 == 1) {
10+
ans.set(ans.size() - 1, ans.get(ans.size() - 1).substring(0, 2));
11+
ans.add(number.substring(n - 2));
12+
} else if (n % 3 == 2) {
13+
ans.add(number.substring(n - 2));
14+
}
15+
return String.join("-", ans);
16+
}
17+
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
class Solution:
2+
def reformatNumber(self, number: str) -> str:
3+
number = number.replace("-", "").replace(" ", "")
4+
n = len(number)
5+
ans = [number[i * 3 : i * 3 + 3] for i in range(n // 3)]
6+
if n % 3 == 1:
7+
ans[-1] = ans[-1][:2]
8+
ans.append(number[-2:])
9+
elif n % 3 == 2:
10+
ans.append(number[-2:])
11+
return "-".join(ans)

0 commit comments

Comments
 (0)