752. 打开转盘锁

https://leetcode-cn.com/problems/open-the-lock/

题目类型:BFS

class Solution {
	//将s[j]向上拨动一次
    String plusOne(String s, int j){
        char[] ch = s.toCharArray();
        if(ch[j] == '9')
            ch[j] = '0';
        else
            ch[j] += 1;
        return new String(ch);
    }
	//将s[s]向下拨动一次
    String minusOne(String s, int j){
        char[] ch = s.toCharArray();
        if(ch[j] == '0')
            ch[j] = '9';
        else
            ch[j] -= 1;
        return new String(ch);
    }
    public int openLock(String[] deadends, String target) {
        //记录要跳过的死亡密码
        Set<String> deads = new HashSet<>();
        for(String s : deadends) deads.add(s);
        //记录已经穷举过的密码
        Set<String> visited = new HashSet<>();
        Queue<String> q = new LinkedList<>();
        int step = 0;
        q.offer("0000");
        visited.add("0000");

        while(!q.isEmpty()){
            int sz = q.size();
            for(int i = 0; i < sz; i++){
                String cur = q.poll();
                if(deads.contains(cur))
                    continue;
                if(cur.equals(target))
                    return step;
                for(int j = 0; j < 4; j++){
                    String up = plusOne(cur, j);
                    if(!visited.contains(up)){
                        q.offer(up);
                        visited.add(up); 
                    }
                    String down = minusOne(cur, j);
                    if(!visited.contains(down)){
                        q.offer(down);
                        visited.add(down);
                    }
                }
            }
            step++;
        }
        return -1;
    }

}

作者:Zhbeii

出处:https://www.cnblogs.com/zhbeii/p/15960857.html

版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。

posted @   Zhbeii  阅读(59)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
more_horiz
keyboard_arrow_up light_mode palette
选择主题
点击右上角即可分享
微信分享提示