Skip to content

Commit a7a3d1e

Browse files
committed
feat: add solutions to lc problems: No.1844,1845
* No.1844.Replace All Digits with Characters * No.1845.Seat Reservation Manager
1 parent 44e93ad commit a7a3d1e

File tree

11 files changed

+333
-26
lines changed

11 files changed

+333
-26
lines changed

solution/1800-1899/1844.Replace All Digits with Characters/README.md

Lines changed: 39 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,14 @@
5353

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

56+
**方法一:模拟**
57+
58+
遍历字符串,对于奇数下标的字符,将其替换为前一个字符后移对应位数的字符。
59+
60+
最后返回替换后的字符串。
61+
62+
时间复杂度 $(n)$,其中 $n$ 为字符串 $s$ 的长度。忽略答案的空间消耗,空间复杂度 $O(1)$。
63+
5664
<!-- tabs:start -->
5765

5866
### **Python3**
@@ -75,12 +83,39 @@ class Solution:
7583
```java
7684
class Solution {
7785
public String replaceDigits(String s) {
78-
char[] chars = s.toCharArray();
79-
for (int i = 1; i < chars.length; i += 2) {
80-
chars[i] = (char) (chars[i - 1] + (chars[i] - '0'));
86+
char[] cs = s.toCharArray();
87+
for (int i = 1; i < cs.length; i += 2) {
88+
cs[i] = (char) (cs[i - 1] + (cs[i] - '0'));
89+
}
90+
return String.valueOf(cs);
91+
}
92+
}
93+
```
94+
95+
### **C++**
96+
97+
```cpp
98+
class Solution {
99+
public:
100+
string replaceDigits(string s) {
101+
int n = s.size();
102+
for (int i = 1; i < n; i += 2) {
103+
s[i] = s[i - 1] + s[i] - '0';
81104
}
82-
return new String(chars);
105+
return s;
83106
}
107+
};
108+
```
109+
110+
### **Go**
111+
112+
```go
113+
func replaceDigits(s string) string {
114+
cs := []byte(s)
115+
for i := 1; i < len(s); i += 2 {
116+
cs[i] = cs[i-1] + cs[i] - '0'
117+
}
118+
return string(cs)
84119
}
85120
```
86121

solution/1800-1899/1844.Replace All Digits with Characters/README_EN.md

Lines changed: 31 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -67,15 +67,42 @@ class Solution:
6767
```java
6868
class Solution {
6969
public String replaceDigits(String s) {
70-
char[] chars = s.toCharArray();
71-
for (int i = 1; i < chars.length; i += 2) {
72-
chars[i] = (char) (chars[i - 1] + (chars[i] - '0'));
70+
char[] cs = s.toCharArray();
71+
for (int i = 1; i < cs.length; i += 2) {
72+
cs[i] = (char) (cs[i - 1] + (cs[i] - '0'));
7373
}
74-
return new String(chars);
74+
return String.valueOf(cs);
7575
}
7676
}
7777
```
7878

79+
### **C++**
80+
81+
```cpp
82+
class Solution {
83+
public:
84+
string replaceDigits(string s) {
85+
int n = s.size();
86+
for (int i = 1; i < n; i += 2) {
87+
s[i] = s[i - 1] + s[i] - '0';
88+
}
89+
return s;
90+
}
91+
};
92+
```
93+
94+
### **Go**
95+
96+
```go
97+
func replaceDigits(s string) string {
98+
cs := []byte(s)
99+
for i := 1; i < len(s); i += 2 {
100+
cs[i] = cs[i-1] + cs[i] - '0'
101+
}
102+
return string(cs)
103+
}
104+
```
105+
79106
### **TypeScript**
80107

81108
```ts
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
class Solution {
2+
public:
3+
string replaceDigits(string s) {
4+
int n = s.size();
5+
for (int i = 1; i < n; i += 2) {
6+
s[i] = s[i - 1] + s[i] - '0';
7+
}
8+
return s;
9+
}
10+
};
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
func replaceDigits(s string) string {
2+
cs := []byte(s)
3+
for i := 1; i < len(s); i += 2 {
4+
cs[i] = cs[i-1] + cs[i] - '0'
5+
}
6+
return string(cs)
7+
}
Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
class Solution {
22
public String replaceDigits(String s) {
3-
char[] chars = s.toCharArray();
4-
for (int i = 1; i < chars.length; i += 2) {
5-
chars[i] = (char) (chars[i - 1] + (chars[i] - '0'));
3+
char[] cs = s.toCharArray();
4+
for (int i = 1; i < cs.length; i += 2) {
5+
cs[i] = (char) (cs[i - 1] + (cs[i] - '0'));
66
}
7-
return new String(chars);
7+
return String.valueOf(cs);
88
}
99
}

solution/1800-1899/1845.Seat Reservation Manager/README.md

Lines changed: 90 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,17 @@ seatManager.unreserve(5); // 将座位 5 变为可以预约,现在可预约的
5454

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

57-
“小根堆”实现。
57+
**方法一:优先队列(小根堆)**
58+
59+
我们可以使用优先队列(小根堆)来维护可预约座位的最小编号。
60+
61+
初始化时,将所有座位的编号放入优先队列中。
62+
63+
当调用 `reserve` 方法时,从优先队列中取出最小编号的座位,即为可预约座位的最小编号。
64+
65+
当调用 `unreserve` 方法时,将座位编号放入优先队列中。
66+
67+
时间复杂度 $O(n \times \log n)$,空间复杂度 $O(n)$。其中 $n$ 为座位的数量。
5868

5969
<!-- tabs:start -->
6070

@@ -64,8 +74,10 @@ seatManager.unreserve(5); // 将座位 5 变为可以预约,现在可预约的
6474

6575
```python
6676
class SeatManager:
77+
6778
def __init__(self, n: int):
68-
self.q = [i for i in range(1, n + 1)]
79+
self.q = list(range(1, n + 1))
80+
heapify(self.q)
6981

7082
def reserve(self) -> int:
7183
return heappop(self.q)
@@ -86,10 +98,9 @@ class SeatManager:
8698

8799
```java
88100
class SeatManager {
89-
private PriorityQueue<Integer> q;
101+
private PriorityQueue<Integer> q = new PriorityQueue<>();
90102

91103
public SeatManager(int n) {
92-
q = new PriorityQueue<>(n);
93104
for (int i = 1; i <= n; ++i) {
94105
q.offer(i);
95106
}
@@ -112,6 +123,81 @@ class SeatManager {
112123
*/
113124
```
114125

126+
### **C++**
127+
128+
```cpp
129+
class SeatManager {
130+
public:
131+
SeatManager(int n) {
132+
for (int i = 1; i <= n; ++i) {
133+
q.push(i);
134+
}
135+
}
136+
137+
int reserve() {
138+
int seat = q.top();
139+
q.pop();
140+
return seat;
141+
}
142+
143+
void unreserve(int seatNumber) {
144+
q.push(seatNumber);
145+
}
146+
147+
private:
148+
priority_queue<int, vector<int>, greater<int>> q;
149+
};
150+
151+
/**
152+
* Your SeatManager object will be instantiated and called as such:
153+
* SeatManager* obj = new SeatManager(n);
154+
* int param_1 = obj->reserve();
155+
* obj->unreserve(seatNumber);
156+
*/
157+
```
158+
159+
### **Go**
160+
161+
```go
162+
type SeatManager struct {
163+
q hp
164+
}
165+
166+
func Constructor(n int) SeatManager {
167+
q := hp{}
168+
for i := 1; i <= n; i++ {
169+
heap.Push(&q, i)
170+
}
171+
return SeatManager{q}
172+
}
173+
174+
func (this *SeatManager) Reserve() int {
175+
return heap.Pop(&this.q).(int)
176+
}
177+
178+
func (this *SeatManager) Unreserve(seatNumber int) {
179+
heap.Push(&this.q, seatNumber)
180+
}
181+
182+
type hp struct{ sort.IntSlice }
183+
184+
func (h hp) Less(i, j int) bool { return h.IntSlice[i] < h.IntSlice[j] }
185+
func (h *hp) Push(v interface{}) { h.IntSlice = append(h.IntSlice, v.(int)) }
186+
func (h *hp) Pop() interface{} {
187+
a := h.IntSlice
188+
v := a[len(a)-1]
189+
h.IntSlice = a[:len(a)-1]
190+
return v
191+
}
192+
193+
/**
194+
* Your SeatManager object will be instantiated and called as such:
195+
* obj := Constructor(n);
196+
* param_1 := obj.Reserve();
197+
* obj.Unreserve(seatNumber);
198+
*/
199+
```
200+
115201
### **...**
116202

117203
```

solution/1800-1899/1845.Seat Reservation Manager/README_EN.md

Lines changed: 81 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -55,8 +55,10 @@ seatManager.unreserve(5); // Unreserve seat 5, so now the available seats are [5
5555

5656
```python
5757
class SeatManager:
58+
5859
def __init__(self, n: int):
59-
self.q = [i for i in range(1, n + 1)]
60+
self.q = list(range(1, n + 1))
61+
heapify(self.q)
6062

6163
def reserve(self) -> int:
6264
return heappop(self.q)
@@ -75,19 +77,18 @@ class SeatManager:
7577

7678
```java
7779
class SeatManager {
78-
private PriorityQueue<Integer> q;
80+
private PriorityQueue<Integer> q = new PriorityQueue<>();
7981

8082
public SeatManager(int n) {
81-
q = new PriorityQueue<>(n);
8283
for (int i = 1; i <= n; ++i) {
8384
q.offer(i);
8485
}
8586
}
86-
87+
8788
public int reserve() {
8889
return q.poll();
8990
}
90-
91+
9192
public void unreserve(int seatNumber) {
9293
q.offer(seatNumber);
9394
}
@@ -101,6 +102,81 @@ class SeatManager {
101102
*/
102103
```
103104

105+
### **C++**
106+
107+
```cpp
108+
class SeatManager {
109+
public:
110+
SeatManager(int n) {
111+
for (int i = 1; i <= n; ++i) {
112+
q.push(i);
113+
}
114+
}
115+
116+
int reserve() {
117+
int seat = q.top();
118+
q.pop();
119+
return seat;
120+
}
121+
122+
void unreserve(int seatNumber) {
123+
q.push(seatNumber);
124+
}
125+
126+
private:
127+
priority_queue<int, vector<int>, greater<int>> q;
128+
};
129+
130+
/**
131+
* Your SeatManager object will be instantiated and called as such:
132+
* SeatManager* obj = new SeatManager(n);
133+
* int param_1 = obj->reserve();
134+
* obj->unreserve(seatNumber);
135+
*/
136+
```
137+
138+
### **Go**
139+
140+
```go
141+
type SeatManager struct {
142+
q hp
143+
}
144+
145+
func Constructor(n int) SeatManager {
146+
q := hp{}
147+
for i := 1; i <= n; i++ {
148+
heap.Push(&q, i)
149+
}
150+
return SeatManager{q}
151+
}
152+
153+
func (this *SeatManager) Reserve() int {
154+
return heap.Pop(&this.q).(int)
155+
}
156+
157+
func (this *SeatManager) Unreserve(seatNumber int) {
158+
heap.Push(&this.q, seatNumber)
159+
}
160+
161+
type hp struct{ sort.IntSlice }
162+
163+
func (h hp) Less(i, j int) bool { return h.IntSlice[i] < h.IntSlice[j] }
164+
func (h *hp) Push(v interface{}) { h.IntSlice = append(h.IntSlice, v.(int)) }
165+
func (h *hp) Pop() interface{} {
166+
a := h.IntSlice
167+
v := a[len(a)-1]
168+
h.IntSlice = a[:len(a)-1]
169+
return v
170+
}
171+
172+
/**
173+
* Your SeatManager object will be instantiated and called as such:
174+
* obj := Constructor(n);
175+
* param_1 := obj.Reserve();
176+
* obj.Unreserve(seatNumber);
177+
*/
178+
```
179+
104180
### **...**
105181

106182
```

0 commit comments

Comments
 (0)