Skip to content

Commit 26f3748

Browse files
committed
feat: add solutions to lc problem: No.0481
No.0481.Magical String
1 parent cde2ec7 commit 26f3748

File tree

4 files changed

+107
-0
lines changed

4 files changed

+107
-0
lines changed

solution/0400-0499/0481.Magical String/README.md

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -150,6 +150,45 @@ func magicalString(n int) int {
150150
}
151151
```
152152

153+
### **TypeScript**
154+
155+
```ts
156+
function magicalString(n: number): number {
157+
const cs = [...'1221121'];
158+
let i = 5;
159+
while (cs.length < n) {
160+
const c = cs[cs.length - 1];
161+
cs.push(c === '1' ? '2' : '1');
162+
if (cs[i] !== '1') {
163+
cs.push(c === '1' ? '2' : '1');
164+
}
165+
i++;
166+
}
167+
return cs.slice(0, n).reduce((r, c) => r + (c === '1' ? 1 : 0), 0);
168+
}
169+
```
170+
171+
### **Rust**
172+
173+
```rust
174+
impl Solution {
175+
pub fn magical_string(n: i32) -> i32 {
176+
let n = n as usize;
177+
let mut s = String::from("1221121");
178+
let mut i = 5;
179+
while s.len() < n {
180+
let c = s.as_bytes()[s.len() - 1];
181+
s.push(if c == b'1' { '2' } else { '1' });
182+
if s.as_bytes()[i] != b'1' {
183+
s.push(if c == b'1' { '2' } else { '1' });
184+
}
185+
i += 1;
186+
}
187+
s.as_bytes()[0..n].iter().filter(|&v| v == &b'1').count() as i32
188+
}
189+
}
190+
```
191+
153192
### **...**
154193

155194
```

solution/0400-0499/0481.Magical String/README_EN.md

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -134,6 +134,45 @@ func magicalString(n int) int {
134134
}
135135
```
136136

137+
### **TypeScript**
138+
139+
```ts
140+
function magicalString(n: number): number {
141+
const cs = [...'1221121'];
142+
let i = 5;
143+
while (cs.length < n) {
144+
const c = cs[cs.length - 1];
145+
cs.push(c === '1' ? '2' : '1');
146+
if (cs[i] !== '1') {
147+
cs.push(c === '1' ? '2' : '1');
148+
}
149+
i++;
150+
}
151+
return cs.slice(0, n).reduce((r, c) => r + (c === '1' ? 1 : 0), 0);
152+
}
153+
```
154+
155+
### **Rust**
156+
157+
```rust
158+
impl Solution {
159+
pub fn magical_string(n: i32) -> i32 {
160+
let n = n as usize;
161+
let mut s = String::from("1221121");
162+
let mut i = 5;
163+
while s.len() < n {
164+
let c = s.as_bytes()[s.len() - 1];
165+
s.push(if c == b'1' { '2' } else { '1' });
166+
if s.as_bytes()[i] != b'1' {
167+
s.push(if c == b'1' { '2' } else { '1' });
168+
}
169+
i += 1;
170+
}
171+
s.as_bytes()[0..n].iter().filter(|&v| v == &b'1').count() as i32
172+
}
173+
}
174+
```
175+
137176
### **...**
138177

139178
```
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
impl Solution {
2+
pub fn magical_string(n: i32) -> i32 {
3+
let n = n as usize;
4+
let mut s = String::from("1221121");
5+
let mut i = 5;
6+
while s.len() < n {
7+
let c = s.as_bytes()[s.len() - 1];
8+
s.push(if c == b'1' { '2' } else { '1' });
9+
if s.as_bytes()[i] != b'1' {
10+
s.push(if c == b'1' { '2' } else { '1' });
11+
}
12+
i += 1;
13+
}
14+
s.as_bytes()[0..n].iter().filter(|&v| v == &b'1').count() as i32
15+
}
16+
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
function magicalString(n: number): number {
2+
const cs = [...'1221121'];
3+
let i = 5;
4+
while (cs.length < n) {
5+
const c = cs[cs.length - 1];
6+
cs.push(c === '1' ? '2' : '1');
7+
if (cs[i] !== '1') {
8+
cs.push(c === '1' ? '2' : '1');
9+
}
10+
i++;
11+
}
12+
return cs.slice(0, n).reduce((r, c) => r + (c === '1' ? 1 : 0), 0);
13+
}

0 commit comments

Comments
 (0)