美文网首页
LeetCode 773. 滑动谜题

LeetCode 773. 滑动谜题

作者: 陈陈chen | 来源:发表于2021-09-30 15:29 被阅读0次

1、题目

image.png

2、分析

直接套用BFS的算法框架就可以。要注意“邻居”数组的定义方式和遍历方式

3、代码

class Solution {
    //注意这里定义二维数组的方式
    int[][] neighbors = {{1, 3}, {0, 2, 4}, {1, 5}, {0, 4}, {1, 3, 5}, {2, 4}};

    public int slidingPuzzle(int[][] board) {
        int m = 2, n = 3;
        StringBuilder sb = new  StringBuilder();
        // 将矩阵转化为字符串
        for (int i = 0; i < m; i++) {
            for (int j = 0; j < n; j++) {
                sb.append(board[i][j]);
            }
        }
        // 设置 start target
        String start = sb.toString();
        String target = "123450";

        Queue<String> q = new LinkedList<>();
        Set<String> visited = new HashSet<>();   // 存储访问过的元素
        q.offer(start);
        visited.add(start);

        int step = 0;
        
        // 遍历每一层多叉树
        while (!q.isEmpty()) {
            int sz = q.size();
            for (int i = 0; i < sz; i++) {
                String cur = q.poll();
                if (cur.equals(target)) return step; // 判断是否到达 target

                int idx = cur.indexOf("0");  // 注意:找到数字0的索引
                // 注意:遍历的数组的方式
                for (int adj : neighbors[idx]) {
                    //找到邻居节点,然后交换
                    String newBoard = swap(cur, adj, idx);
                    if (!visited.contains(newBoard)) {
                        q.offer(newBoard);
                        visited.add(newBoard);
                    }
                }
            }
            step++;
        }
        return -1;
    }

    // 交换位置
    private String swap(String str, int dst, int src) {
        char[] arr = str.toCharArray();
        char temp = arr[src];
        arr[src] = arr[dst];
        arr[dst] = temp;
        return new String(arr);
    }
}

相关文章

  • 如何用 BFS 算法秒杀各种智力题

    读完本文,你可以去力扣拿下如下题目: 773.滑动谜题[https://leetcode-cn.com/probl...

  • LeetCode 773. 滑动谜题

    1、题目 2、分析 直接套用BFS的算法框架就可以。要注意“邻居”数组的定义方式和遍历方式 3、代码

  • LeetCode 239. Sliding Window Max

    Leetcode : Sliding Window MaximumDiffculty:Hard 关键字:滑动窗口,...

  • leetcode 滑动窗口总结

    leetcode关于滑动窗口的题目不少,在这里做个总结。 leetcode438. Find All Anagra...

  • 滑动窗口 02

    滑动窗口 02 [https://leetcode-cn.com/problems/longest-repeati...

  • 滑动窗口

    滑动窗口算法 口诀心法 解题模板 Leetcode 上的几道经典试题 leetcode76. 最小覆盖子串 难...

  • LeetCode 滑动窗口·

    1438. 绝对差不超过限制的最长连续子数组[https://leetcode-cn.com/problems/l...

  • 239. 滑动窗口最大值

    239. 滑动窗口最大值[https://leetcode.cn/problems/sliding-window-...

  • 20190923:leetcode713

    这道题是叫做滑动谜题,我想到了小时候玩的滑动拼图。可是我发现,我并没有总结出其中的规律。为此,我还专门下载了一个游...

  • 239. 滑动窗口最大值

    239. 滑动窗口最大值[https://leetcode-cn.com/problems/sliding-win...

网友评论

      本文标题:LeetCode 773. 滑动谜题

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