Skip to content

Commit 428e08e

Browse files
authoredJun 4, 2024··
refactor: improve ts solution to lc problem: No.433 (#3017)
1 parent 2d20e9d commit 428e08e

File tree

3 files changed

+48
-66
lines changed

3 files changed

+48
-66
lines changed
 

Diff for: ‎solution/0400-0499/0433.Minimum Genetic Mutation/README.md

+16-22
Original file line numberDiff line numberDiff line change
@@ -214,31 +214,25 @@ 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;
226-
}
227-
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));
217+
function minMutation(startGene: string, endGene: string, bank: string[]): number {
218+
const q: [string, number][] = [[startGene, 0]];
219+
const vis = new Set<string>([startGene]);
220+
for (const [gene, depth] of q) {
221+
if (gene === endGene) {
222+
return depth;
223+
}
224+
for (const next of bank) {
225+
let c = 2;
226+
for (let k = 0; k < 8 && c > 0; ++k) {
227+
if (gene[k] !== next[k]) {
228+
--c;
238229
}
239230
}
231+
if (c && !vis.has(next)) {
232+
q.push([next, depth + 1]);
233+
vis.add(next);
234+
}
240235
}
241-
res++;
242236
}
243237
return -1;
244238
}

Diff for: ‎solution/0400-0499/0433.Minimum Genetic Mutation/README_EN.md

+16-22
Original file line numberDiff line numberDiff line change
@@ -203,31 +203,25 @@ 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;
215-
}
216-
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));
206+
function minMutation(startGene: string, endGene: string, bank: string[]): number {
207+
const q: [string, number][] = [[startGene, 0]];
208+
const vis = new Set<string>([startGene]);
209+
for (const [gene, depth] of q) {
210+
if (gene === endGene) {
211+
return depth;
212+
}
213+
for (const next of bank) {
214+
let c = 2;
215+
for (let k = 0; k < 8 && c > 0; ++k) {
216+
if (gene[k] !== next[k]) {
217+
--c;
227218
}
228219
}
220+
if (c && !vis.has(next)) {
221+
q.push([next, depth + 1]);
222+
vis.add(next);
223+
}
229224
}
230-
res++;
231225
}
232226
return -1;
233227
}
+16-22
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-
}
11-
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));
1+
function minMutation(startGene: string, endGene: string, bank: string[]): number {
2+
const q: [string, number][] = [[startGene, 0]];
3+
const vis = new Set<string>([startGene]);
4+
for (const [gene, depth] of q) {
5+
if (gene === endGene) {
6+
return depth;
7+
}
8+
for (const next of bank) {
9+
let c = 2;
10+
for (let k = 0; k < 8 && c > 0; ++k) {
11+
if (gene[k] !== next[k]) {
12+
--c;
2213
}
2314
}
15+
if (c && !vis.has(next)) {
16+
q.push([next, depth + 1]);
17+
vis.add(next);
18+
}
2419
}
25-
res++;
2620
}
2721
return -1;
2822
}

0 commit comments

Comments
 (0)
Please sign in to comment.