美文网首页
752. 打开转盘锁(仅思路)

752. 打开转盘锁(仅思路)

作者: HamletSunS | 来源:发表于2019-08-10 14:49 被阅读0次

思路:
广度优先搜索

关键点:

  1. 如何把死亡数字转换成入队时的判断条件
  2. 如何获取下一组可以调整的数字(地位等同于广度搜索的下一层节点)

参考代码

public int openLock(String[] deadends, String target) {
        //用来将数字转换为char的查询表
        char[] pos = new char[]{'0', '1', '2', '3', '4', '5', '6', '7', '8', '9'};
        Set<String> set = new HashSet<>(Arrays.asList(deadends));
        LinkedList<String> list = new LinkedList<>();
        if (target == null || target.length() == 0 || set.contains("0000"))
            return -1;
        list.add("0000");
        int depth = 0;
        //广度优先遍历
        while (!list.isEmpty()) {
            int size = list.size();
            while (size-- > 0) {
                String str = list.removeFirst();
                if (str.equals(target)) {
                    return depth;
                }
                if (!set.contains(str)) {
                    set.add(str);
                    list.addAll(getNextList(str, pos));
                }
            }
            //每一层遍历完,深度加一
            depth++;
        }
        return -1;
    }

    private List<String> getNextList(String str, char[] pos) {
        List<String> res = new ArrayList<>();
        char[] chars = str.toCharArray();
        for (int i = 0; i < chars.length; i++) {
            int num = chars[i] - '0';
            char[] newChars = chars.clone();
            newChars[i] = pos[(num + 11) % 10];     //数字加一
            res.add(new String(newChars));
            newChars[i] = pos[(num + 9) % 10];      //数字减一
            res.add(new String(newChars));
        }
        return res;
    }


相关文章

  • 752. 打开转盘锁(仅思路)

    思路:广度优先搜索 关键点: 如何把死亡数字转换成入队时的判断条件 如何获取下一组可以调整的数字(地位等同于广度搜...

  • 752. 打开转盘锁

    752. 打开转盘锁 1.想法 我们有以下结论:1.每次维护一个已经到达的String,这些字符串这一步的位置,分...

  • 752. 打开转盘锁

    你有一个带有四个圆形拨轮的转盘锁。每个拨轮都有10个数字: '0', '1', '2', '3', '4', '5...

  • 752. 打开转盘锁(Python)

    难度:★★★☆☆类型:图方法:宽度优先搜索 力扣链接请移步本题传送门[https://leetcode-cn.co...

  • LeetCode 752. 打开转盘锁

    1、题目 2、分析 基本上直接套用BFS的算法框架就可以 3、代码

  • leetcode-打开转盘锁

    这道题估计在让我做一次,我还是做不出来的,想不到,且不好理解。 这道题用了BFS,广度优先搜索。利用queue队列...

  • LeetCode 第127题:单词接龙

    1、前言 2、思路 如果用 BFS 来做,需要知道怎样把这个过程抽象成一个图。模仿转盘锁的思路来做,其实思路是一样...

  • LeetCode 第752题:打开转盘锁

    1、前言 2、思路 主要思路使用 BFS。锁有四个位置,从 “0000” 开始,每个位置如果只转一下,分为向上转跟...

  • 2019-05-23打开转盘锁

  • css3 转盘抽奖实践(sass)

    思路解释 转盘抽奖,就是像这样子的转盘。(如下图)点击中间的“点击抽奖”按钮,然后后面的圆形转盘开始转动,最后停在...

网友评论

      本文标题:752. 打开转盘锁(仅思路)

      本文链接:https://www.haomeiwen.com/subject/uljrjctx.html