Skip to content

Commit 2980cef

Browse files
committed
refactor: improve ts solution to lc problem: No.433
1 parent 2d20e9d commit 2980cef

File tree

3 files changed

+48
-66
lines changed

3 files changed

+48
-66
lines changed

solution/0400-0499/0433.Minimum Genetic Mutation/README.md

Lines changed: 16 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -214,32 +214,26 @@ func minMutation(start string, end string, bank []string) int {
214214
#### TypeScript
215215

216216
```ts
217-
function minMutation(start: string, end: string, bank: string[]): number {
218-
const queue = [start];
219-
let res = 0;
220-
while (queue.length !== 0) {
221-
const n = queue.length;
222-
for (let i = 0; i < n; i++) {
223-
const s1 = queue.shift();
224-
if (s1 === end) {
225-
return res;
217+
function minMutation(startGene: string, endGene: string, bank: string[]): number {
218+
const vis = new Set<string>();
219+
const q: [string, number][] = [[startGene, 0]];
220+
221+
for (const [gene, depth] of q) {
222+
if (gene === endGene) return depth;
223+
if (vis.has(gene)) continue;
224+
vis.add(gene);
225+
226+
for (const next of bank) {
227+
let c = 2;
228+
for (let k = 0; k < 8; k++) {
229+
if (gene[k] !== next[k]) c--;
230+
if (!c) break;
226231
}
227232

228-
for (let j = bank.length - 1; j >= 0; j--) {
229-
const s2 = bank[j];
230-
let count = 0;
231-
for (let k = 0; k < 8; k++) {
232-
if (s1[k] !== s2[k]) {
233-
count++;
234-
}
235-
}
236-
if (count <= 1) {
237-
queue.push(...bank.splice(j, 1));
238-
}
239-
}
233+
if (c) q.push([next, depth + 1]);
240234
}
241-
res++;
242235
}
236+
243237
return -1;
244238
}
245239
```

solution/0400-0499/0433.Minimum Genetic Mutation/README_EN.md

Lines changed: 16 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -203,32 +203,26 @@ func minMutation(start string, end string, bank []string) int {
203203
#### TypeScript
204204

205205
```ts
206-
function minMutation(start: string, end: string, bank: string[]): number {
207-
const queue = [start];
208-
let res = 0;
209-
while (queue.length !== 0) {
210-
const n = queue.length;
211-
for (let i = 0; i < n; i++) {
212-
const s1 = queue.shift();
213-
if (s1 === end) {
214-
return res;
206+
function minMutation(startGene: string, endGene: string, bank: string[]): number {
207+
const vis = new Set<string>();
208+
const q: [string, number][] = [[startGene, 0]];
209+
210+
for (const [gene, depth] of q) {
211+
if (gene === endGene) return depth;
212+
if (vis.has(gene)) continue;
213+
vis.add(gene);
214+
215+
for (const next of bank) {
216+
let c = 2;
217+
for (let k = 0; k < 8; k++) {
218+
if (gene[k] !== next[k]) c--;
219+
if (!c) break;
215220
}
216221

217-
for (let j = bank.length - 1; j >= 0; j--) {
218-
const s2 = bank[j];
219-
let count = 0;
220-
for (let k = 0; k < 8; k++) {
221-
if (s1[k] !== s2[k]) {
222-
count++;
223-
}
224-
}
225-
if (count <= 1) {
226-
queue.push(...bank.splice(j, 1));
227-
}
228-
}
222+
if (c) q.push([next, depth + 1]);
229223
}
230-
res++;
231224
}
225+
232226
return -1;
233227
}
234228
```
Lines changed: 16 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,22 @@
1-
function minMutation(start: string, end: string, bank: string[]): number {
2-
const queue = [start];
3-
let res = 0;
4-
while (queue.length !== 0) {
5-
const n = queue.length;
6-
for (let i = 0; i < n; i++) {
7-
const s1 = queue.shift();
8-
if (s1 === end) {
9-
return res;
10-
}
1+
function minMutation(startGene: string, endGene: string, bank: string[]): number {
2+
const vis = new Set<string>();
3+
const q: [string, number][] = [[startGene, 0]];
4+
5+
for (const [gene, depth] of q) {
6+
if (gene === endGene) return depth;
7+
if (vis.has(gene)) continue;
8+
vis.add(gene);
119

12-
for (let j = bank.length - 1; j >= 0; j--) {
13-
const s2 = bank[j];
14-
let count = 0;
15-
for (let k = 0; k < 8; k++) {
16-
if (s1[k] !== s2[k]) {
17-
count++;
18-
}
19-
}
20-
if (count <= 1) {
21-
queue.push(...bank.splice(j, 1));
22-
}
10+
for (const next of bank) {
11+
let c = 2;
12+
for (let k = 0; k < 8; k++) {
13+
if (gene[k] !== next[k]) c--;
14+
if (!c) break;
2315
}
16+
17+
if (c) q.push([next, depth + 1]);
2418
}
25-
res++;
2619
}
20+
2721
return -1;
2822
}

0 commit comments

Comments
 (0)