From 2980cef9b6416c5a8d1d0cb2afc4e693c7153e64 Mon Sep 17 00:00:00 2001 From: rain84 Date: Mon, 3 Jun 2024 17:04:04 +0300 Subject: [PATCH 1/4] refactor: improve ts solution to lc problem: No.433 --- .../0433.Minimum Genetic Mutation/README.md | 38 ++++++++----------- .../README_EN.md | 38 ++++++++----------- .../0433.Minimum Genetic Mutation/Solution.ts | 38 ++++++++----------- 3 files changed, 48 insertions(+), 66 deletions(-) diff --git a/solution/0400-0499/0433.Minimum Genetic Mutation/README.md b/solution/0400-0499/0433.Minimum Genetic Mutation/README.md index 84664ab386a65..054d082b77228 100644 --- a/solution/0400-0499/0433.Minimum Genetic Mutation/README.md +++ b/solution/0400-0499/0433.Minimum Genetic Mutation/README.md @@ -214,32 +214,26 @@ func minMutation(start string, end string, bank []string) int { #### TypeScript ```ts -function minMutation(start: string, end: string, bank: string[]): number { - const queue = [start]; - let res = 0; - while (queue.length !== 0) { - const n = queue.length; - for (let i = 0; i < n; i++) { - const s1 = queue.shift(); - if (s1 === end) { - return res; +function minMutation(startGene: string, endGene: string, bank: string[]): number { + const vis = new Set(); + const q: [string, number][] = [[startGene, 0]]; + + for (const [gene, depth] of q) { + if (gene === endGene) return depth; + if (vis.has(gene)) continue; + vis.add(gene); + + for (const next of bank) { + let c = 2; + for (let k = 0; k < 8; k++) { + if (gene[k] !== next[k]) c--; + if (!c) break; } - for (let j = bank.length - 1; j >= 0; j--) { - const s2 = bank[j]; - let count = 0; - for (let k = 0; k < 8; k++) { - if (s1[k] !== s2[k]) { - count++; - } - } - if (count <= 1) { - queue.push(...bank.splice(j, 1)); - } - } + if (c) q.push([next, depth + 1]); } - res++; } + return -1; } ``` diff --git a/solution/0400-0499/0433.Minimum Genetic Mutation/README_EN.md b/solution/0400-0499/0433.Minimum Genetic Mutation/README_EN.md index cd77bc658210d..841ec68c41213 100644 --- a/solution/0400-0499/0433.Minimum Genetic Mutation/README_EN.md +++ b/solution/0400-0499/0433.Minimum Genetic Mutation/README_EN.md @@ -203,32 +203,26 @@ func minMutation(start string, end string, bank []string) int { #### TypeScript ```ts -function minMutation(start: string, end: string, bank: string[]): number { - const queue = [start]; - let res = 0; - while (queue.length !== 0) { - const n = queue.length; - for (let i = 0; i < n; i++) { - const s1 = queue.shift(); - if (s1 === end) { - return res; +function minMutation(startGene: string, endGene: string, bank: string[]): number { + const vis = new Set(); + const q: [string, number][] = [[startGene, 0]]; + + for (const [gene, depth] of q) { + if (gene === endGene) return depth; + if (vis.has(gene)) continue; + vis.add(gene); + + for (const next of bank) { + let c = 2; + for (let k = 0; k < 8; k++) { + if (gene[k] !== next[k]) c--; + if (!c) break; } - for (let j = bank.length - 1; j >= 0; j--) { - const s2 = bank[j]; - let count = 0; - for (let k = 0; k < 8; k++) { - if (s1[k] !== s2[k]) { - count++; - } - } - if (count <= 1) { - queue.push(...bank.splice(j, 1)); - } - } + if (c) q.push([next, depth + 1]); } - res++; } + return -1; } ``` diff --git a/solution/0400-0499/0433.Minimum Genetic Mutation/Solution.ts b/solution/0400-0499/0433.Minimum Genetic Mutation/Solution.ts index d6d8401abba54..4eab2db4e999e 100644 --- a/solution/0400-0499/0433.Minimum Genetic Mutation/Solution.ts +++ b/solution/0400-0499/0433.Minimum Genetic Mutation/Solution.ts @@ -1,28 +1,22 @@ -function minMutation(start: string, end: string, bank: string[]): number { - const queue = [start]; - let res = 0; - while (queue.length !== 0) { - const n = queue.length; - for (let i = 0; i < n; i++) { - const s1 = queue.shift(); - if (s1 === end) { - return res; - } +function minMutation(startGene: string, endGene: string, bank: string[]): number { + const vis = new Set(); + const q: [string, number][] = [[startGene, 0]]; + + for (const [gene, depth] of q) { + if (gene === endGene) return depth; + if (vis.has(gene)) continue; + vis.add(gene); - for (let j = bank.length - 1; j >= 0; j--) { - const s2 = bank[j]; - let count = 0; - for (let k = 0; k < 8; k++) { - if (s1[k] !== s2[k]) { - count++; - } - } - if (count <= 1) { - queue.push(...bank.splice(j, 1)); - } + for (const next of bank) { + let c = 2; + for (let k = 0; k < 8; k++) { + if (gene[k] !== next[k]) c--; + if (!c) break; } + + if (c) q.push([next, depth + 1]); } - res++; } + return -1; } From 0ade2d1c73eb7a0ffa4a46f26f11dd8278d0a840 Mon Sep 17 00:00:00 2001 From: Libin YANG Date: Tue, 4 Jun 2024 07:57:48 +0800 Subject: [PATCH 2/4] Update README.md --- .../0433.Minimum Genetic Mutation/README.md | 24 +++++++++---------- 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/solution/0400-0499/0433.Minimum Genetic Mutation/README.md b/solution/0400-0499/0433.Minimum Genetic Mutation/README.md index 054d082b77228..7e749c1fe32a4 100644 --- a/solution/0400-0499/0433.Minimum Genetic Mutation/README.md +++ b/solution/0400-0499/0433.Minimum Genetic Mutation/README.md @@ -215,25 +215,25 @@ func minMutation(start string, end string, bank []string) int { ```ts function minMutation(startGene: string, endGene: string, bank: string[]): number { - const vis = new Set(); const q: [string, number][] = [[startGene, 0]]; - + const vis = new Set([startGene]); for (const [gene, depth] of q) { - if (gene === endGene) return depth; - if (vis.has(gene)) continue; - vis.add(gene); - + if (gene === endGene) { + return depth; + } for (const next of bank) { let c = 2; - for (let k = 0; k < 8; k++) { - if (gene[k] !== next[k]) c--; - if (!c) break; + for (let k = 0; k < 8 && c > 0; ++k) { + if (gene[k] !== next[k]) { + --c; + } + } + if (c && !vis.has(next)) { + q.push([next, depth + 1]); + vis.add(next); } - - if (c) q.push([next, depth + 1]); } } - return -1; } ``` From 95e91b219763fab6f0796ab9ab198704fbe1baf2 Mon Sep 17 00:00:00 2001 From: Libin YANG Date: Tue, 4 Jun 2024 07:58:15 +0800 Subject: [PATCH 3/4] Update Solution.ts --- .../0433.Minimum Genetic Mutation/Solution.ts | 24 +++++++++---------- 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/solution/0400-0499/0433.Minimum Genetic Mutation/Solution.ts b/solution/0400-0499/0433.Minimum Genetic Mutation/Solution.ts index 4eab2db4e999e..06338c771ee60 100644 --- a/solution/0400-0499/0433.Minimum Genetic Mutation/Solution.ts +++ b/solution/0400-0499/0433.Minimum Genetic Mutation/Solution.ts @@ -1,22 +1,22 @@ function minMutation(startGene: string, endGene: string, bank: string[]): number { - const vis = new Set(); const q: [string, number][] = [[startGene, 0]]; - + const vis = new Set([startGene]); for (const [gene, depth] of q) { - if (gene === endGene) return depth; - if (vis.has(gene)) continue; - vis.add(gene); - + if (gene === endGene) { + return depth; + } for (const next of bank) { let c = 2; - for (let k = 0; k < 8; k++) { - if (gene[k] !== next[k]) c--; - if (!c) break; + for (let k = 0; k < 8 && c > 0; ++k) { + if (gene[k] !== next[k]) { + --c; + } + } + if (c && !vis.has(next)) { + q.push([next, depth + 1]); + vis.add(next); } - - if (c) q.push([next, depth + 1]); } } - return -1; } From 91141f82e50270715ce463c74fb06c9b53c0c86f Mon Sep 17 00:00:00 2001 From: Libin YANG Date: Tue, 4 Jun 2024 07:58:34 +0800 Subject: [PATCH 4/4] Update README_EN.md --- .../README_EN.md | 24 +++++++++---------- 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/solution/0400-0499/0433.Minimum Genetic Mutation/README_EN.md b/solution/0400-0499/0433.Minimum Genetic Mutation/README_EN.md index 841ec68c41213..b95320f7c57d5 100644 --- a/solution/0400-0499/0433.Minimum Genetic Mutation/README_EN.md +++ b/solution/0400-0499/0433.Minimum Genetic Mutation/README_EN.md @@ -204,25 +204,25 @@ func minMutation(start string, end string, bank []string) int { ```ts function minMutation(startGene: string, endGene: string, bank: string[]): number { - const vis = new Set(); const q: [string, number][] = [[startGene, 0]]; - + const vis = new Set([startGene]); for (const [gene, depth] of q) { - if (gene === endGene) return depth; - if (vis.has(gene)) continue; - vis.add(gene); - + if (gene === endGene) { + return depth; + } for (const next of bank) { let c = 2; - for (let k = 0; k < 8; k++) { - if (gene[k] !== next[k]) c--; - if (!c) break; + for (let k = 0; k < 8 && c > 0; ++k) { + if (gene[k] !== next[k]) { + --c; + } + } + if (c && !vis.has(next)) { + q.push([next, depth + 1]); + vis.add(next); } - - if (c) q.push([next, depth + 1]); } } - return -1; } ```