刷题“神”辅助工具:豆包MarsCode初次使用

570 阅读4分钟

嗨咯,大家好,我是Ling,今天是我用豆包MarsCode刷题的第一天。系统默认提供了100道题目,用户也可以自己添加,这个功能挺不错的。

题目1:岛屿数量

image.png 从上图可以看到,将自定义的题目添加上去后,ai助手可以比较精确的提示做题思路。使用起来其实很方便,官方也有文档指导

对于这道经典的题目,可以看到给出的提示是非常全的:

对于这道计算岛屿数量的题目,我们可以这样理解:

问题理解: 我们需要在给定的二维网格中找出相互独立的陆地区域,这些陆地区域被水包围且相邻陆地相连,每个独立的陆地区域就是一个岛屿。

数据结构选择: 可以使用深度优先搜索(DFS)或广度优先搜索(BFS)来遍历网格。通常会使用一个二维布尔数组来标记已经访问过的单元格,防止重复访问。

算法步骤:

1.  遍历整个二维网格。

1.  对于每个未访问过的陆地单元格(值为 '1'),执行以下操作:

    -   标记该单元格为已访问。
    -   通过 DFS 或 BFS 算法,从该单元格开始向四周扩展,访问所有相邻的陆地单元格,并标记为已访问。
    -   岛屿数量加 1。

按照这个提示写出来的代码:

class Solution {
    public int numIslands(char[][] grid) {
        int res = 0;
        // 遍历
        for(int i = 0; i < grid.length; i++) {
            for(int j = 0; j < grid[i].length; j++) {
                // 执行dfs
                if(grid[i][j] == '1') {
                    // dfs
                    dfs(grid, i, j);
                    res++;
                }
            }
        }
        return res;
    }

    public void dfs(char[][] grid, int i, int j) {
        // 终止条件
        if(i < 0 || j < 0 || i == grid.length || j == grid[i].length ||grid[i][j] == '0') {
            return;
        }

        // 将当前标记为已访问
        grid[i][j] = '0';

        dfs(grid, i + 1, j);
        dfs(grid, i - 1, j);
        dfs(grid, i, j + 1);
        dfs(grid, i, j - 1);

    }
}

其实,这类问题中,有回溯的思想,不进行详细展开了。

类似题目进阶的有岛屿最大面积,其实思路一致,只不过是dfs的函数需要记录每个岛屿的单元个数。同样,我们把题目添加进来:

题目2: 岛屿最大面积

image.png 这一次,我让助手帮生成了代码,经过验证生成的代码还是比较靠谱的!同样的我在leetcode上已经作答了这个题目,目前看这个助手给到的代码提示的思路是比较清晰。

我们再次进行使用,这次计划将题目的复杂度变得高些(纯通过文字描述比较难理解)的迷宫问题

题目3:迷宫问题II

针对这道题目,相信大家都知道怎么添加进去了,所以不贴图了。首先针对这个题目,给出的思路是这样的

对于这道迷宫球的问题,我们可以这样理解:

问题理解: 我们需要找到球从起始位置滚到目的地的最短路径,球会一直沿着一个方向滚动直到碰到墙才停下。

数据结构选择: 可以考虑使用广度优先搜索(Breadth-First Search,BFS)来解决这个问题。因为 BFS 能够保证先搜索到距离起始点较近的节点,从而找到最短路径。

算法步骤

  1. 首先创建一个队列来存储待扩展的节点,每个节点包含球的位置和已经走过的步数。
  2. 将起始位置加入队列,并标记为已访问。
  3. 从队列中取出一个节点,对其四个方向(上、下、左、右)进行扩展。
  4. 如果扩展的位置是合法的(在迷宫范围内且为空地且未被访问过),则将其加入队列,并标记为已访问,同时记录走过的步数。
  5. 重复步骤 3 和 4,直到队列为空或者找到目的地。

其中提示说到BFS可以保证先找到最短的距离,可能有的小伙伴不理解这句话,没关系!豆包也可以帮我们讲解!

image.png

图片可能不够清晰,我把文字贴在下面:

广度优先搜索(Breadth-First Search,BFS)是一种图或树的遍历算法。在这个迷宫球的问题中选择 BFS 主要有以下原因:

BFS 会逐层地探索节点。也就是说,它先访问距离起始点距离为 1 的所有节点,然后是距离为 2 的节点,以此类推。

这一特性使得 BFS 能够首先找到距离起始点较近的路径。对于寻找最短路径的问题,比如我们这个迷宫球到达目的地的最短路径,BFS 非常适用。

因为它保证了在找到任何路径时,首先找到的就是最短路径。相比之下,其他一些搜索算法可能会先探索更深层次的节点,不一定能最先找到最短路径。

豆包已经给了如此清晰的思路,代码我就不贴了~我继续去刷题了

总结

相信通过这三道题目,加上豆包的辅助,你的刷题之路一定会变的更加有趣!