【LintCode题解|阿里巴巴高频题:岛屿的个数】
【题目描述 】
给一个 01 矩阵,求不同的岛屿的个数。
0 代表海,1 代表岛,如果两个 1 相邻,那么这两个 1 属于同一个岛。我们只考虑上下左右为相邻。
【题目样例 】
样例 1:
输入:
[
[1,1,0,0,0],
[0,1,0,0,1],
[0,0,0,1,1],
[0,0,0,0,0],
[0,0,0,0,1]
]
输出:
3
样例 2:
输入:
[
[1,1]
]
输出:
1
【题目解析 】:
使用 DFS 的方法进行搜索。
DFS 分为两类:
找所有路径的
找所有节点的
第一类一般需要回溯,也就是把一个东西标记为使用过以后要把他标记回来。这样才能找到所有的路径。
第二类不需要回溯,因为只需要把所有连通的节点都标记一下即可。
DFS 来做这道题目虽然可以在 LintCode / LeetCode 等题库拿到 AC,但是在面试中并不推荐,因为 DFS 的深度可能会比较深。
【参考代码见图片】
[点击Lintcode](
www.lintcode.com)进行在线评测
【题目描述 】
给一个 01 矩阵,求不同的岛屿的个数。
0 代表海,1 代表岛,如果两个 1 相邻,那么这两个 1 属于同一个岛。我们只考虑上下左右为相邻。
【题目样例 】
样例 1:
输入:
[
[1,1,0,0,0],
[0,1,0,0,1],
[0,0,0,1,1],
[0,0,0,0,0],
[0,0,0,0,1]
]
输出:
3
样例 2:
输入:
[
[1,1]
]
输出:
1
【题目解析 】:
使用 DFS 的方法进行搜索。
DFS 分为两类:
找所有路径的
找所有节点的
第一类一般需要回溯,也就是把一个东西标记为使用过以后要把他标记回来。这样才能找到所有的路径。
第二类不需要回溯,因为只需要把所有连通的节点都标记一下即可。
DFS 来做这道题目虽然可以在 LintCode / LeetCode 等题库拿到 AC,但是在面试中并不推荐,因为 DFS 的深度可能会比较深。
【参考代码见图片】
[点击Lintcode](
展开
6
4