LeetCode之图的广度优先搜索

433. 最小基因变化

java 复制代码
class Solution {
    public int minMutation(String start, String end, String[] bank) {
        // 将基因库存储在集合中,便于快速查找
        Set<String> bankSet = new HashSet<>(Arrays.asList(bank));
        
        // 如果目标基因不在基因库中,则直接返回 -1
        if (!bankSet.contains(end)) {
            return -1;
        }

        // 定义 BFS 队列
        Queue<String> queue = new LinkedList<>();
        queue.offer(start);

        // 记录变换的步骤
        int steps = 0;

        // 定义基因的四个可变字符
        char[] genes = {'A', 'C', 'G', 'T'};

        // 开始 BFS 遍历
        while (!queue.isEmpty()) {
            int size = queue.size();

            // 处理当前层的所有基因变化
            for (int i = 0; i < size; i++) {
                String currentGene = queue.poll();

                // 如果当前基因是目标基因,返回步骤数
                if (currentGene.equals(end)) {
                    return steps;
                }

                // 生成可能的下一步基因
                for (int j = 0; j < currentGene.length(); j++) {
                    for (char gene : genes) {
                        if (gene != currentGene.charAt(j)) { // 只替换与当前基因不同的字符
                            StringBuilder nextGene = new StringBuilder(currentGene);
                            nextGene.setCharAt(j, gene); // 替换字符
                            String newGene = nextGene.toString();

                            // 如果新生成的基因在库中,加入队列并从银行中移除以避免重复
                            if (bankSet.contains(newGene)) {
                                queue.offer(newGene);
                                bankSet.remove(newGene); // 以避免将来再访问
                            }
                        }
                    }
                }
            }
            steps++; // 每层遍历结束,步数加 1
        }

        return -1; // 如果无法到达目标基因,返回 -1
    }
}
相关推荐
江畔柳前堤2 小时前
大语言模型分布式训练:从并行策略到万卡工程的系统梳理
人工智能·分布式·深度学习·算法·目标检测·机器学习·语言模型
Forever Nore3 小时前
LeetCode 4 寻找两个正序数组的中位数 - 二分
算法·leetcode
罗西的思考4 小时前
【OpenClaw具身硬件】MiniClaw 阅读笔记---(1)基础
人工智能·算法·机器学习
蛋先生DX5 小时前
大模型参数存储格式揭秘:BF不是男朋友
深度学习·算法·llm
爱跳舞的烤冷面6 小时前
自学嵌入式第22天(数据结构——哈希)
数据结构·算法·哈希算法
猎嘤一号6 小时前
博弈论(Game Theory)的理论、算法与工程
人工智能·算法·安全·博弈论
月光船幽幽6 小时前
影子模式下保护 logits 不被修改
人工智能·python·算法
马拉AI6 小时前
腾讯开源 Agent 记忆系统,AI“换对话就忘”的问题有了新解法(附安装使用教程)
人工智能·算法·开源·科研
地平线开发者8 小时前
征程6工具链模型X86推理方式说明
算法
地平线开发者8 小时前
【征程6】校准量化中HistogramObserver解析
算法