LeetCode 433. 最小基因变化

迷南。 2022-12-23 13:28 201阅读 0赞

LeetCode 433. 最小基因变化

  • 题目:
  • 解题方法:
    • 方法1:DFS(深度优先搜索)
      • Java实现

题目:

LeetCode 433. 最小基因变化

一条基因序列由一个带有8个字符的字符串表示,其中每个字符都属于 “A”, “C”, “G”, “T”中的任意一个。
假设我们要调查一个基因序列的变化。一次基因变化意味着这个基因序列中的一个字符发生了变化。
例如,基因序列由”AACCGGTT” 变化至 “AACCGGTA” 即发生了一次基因变化。
与此同时,每一次基因变化的结果,都需要是一个合法的基因串,即该结果属于一个基因库。
现在给定3个参数 — start, end, bank,分别代表起始基因序列,目标基因序列及基因库,请找出能够使起始基因序列变化为目标基因序列所需的最少变化次数。如果无法实现目标变化,请返回 -1。
注意:
1、起始基因序列默认是合法的,但是它并不一定会出现在基因库中。
2、所有的目标基因序列必须是合法的。
3、假定起始基因序列与目标基因序列是不一样的。

在这里插入图片描述

解题方法:

方法1:DFS(深度优先搜索)

Java实现

  1. class Solution {
  2. // 需要的结果,找出能够使起始基因序列变化为目标基因序列所需的最少变化次数。如果无法实现目标变化,请返回 -1
  3. // 其实就是暗示说,有些start 变成 end 的 次数不唯一,需要取最小
  4. int minResult = Integer.MAX_VALUE;
  5. public int minMutation(String start, String end, String[] bank) {
  6. char[][] banks = new char[bank.length][start.length()];
  7. for (int i = 0; i < bank.length; i++) {
  8. banks[i] = bank[i].toCharArray();
  9. }
  10. dfs(start.toCharArray(), end.toCharArray(), banks, 0);
  11. return minResult == Integer.MAX_VALUE ? -1 : minResult;
  12. }
  13. public void dfs(char[] start, char[] end, char[][] banks, int change) {
  14. // terminator
  15. if (Arrays.equals(start, end)) {
  16. minResult = Math.min(minResult, change);
  17. return;
  18. }
  19. for (int i = banks.length - 1; i >= 0 ; i--) {
  20. // process current level logic
  21. if (banks[i] == null) { continue; }
  22. char[] tmp = banks[i];
  23. int diff = 0;
  24. for (int j =0; j < start.length; j++) {
  25. if (start[j] != tmp[j]) { diff++; }
  26. }
  27. if (diff == 1) {
  28. banks[i] = null;
  29. // drill down
  30. dfs(tmp, end, banks, change+1);
  31. // reverse current level status
  32. banks[i] = tmp;
  33. }
  34. }
  35. }
  36. }

发表评论

表情:
评论列表 (有 0 条评论,201人围观)

还没有评论,来说两句吧...

相关阅读

    相关 leetcode433 基因变化-bfs

    一条基因序列由一个带有8个字符的字符串表示,其中每个字符都属于 “A”, “C”, “G”, "T"中的任意一个。 假设我们要调查一个基因序列的变化。一次基因变化意味着这个基

    相关 LeetCode155:

    最小栈 题目描述 设计一个支持 push,pop,top 操作,并能在常数时间内检索到最小元素的栈。 push(x) – 将元素 x 推入栈中。 po