Skip to content

Commit 06be5bd

Browse files
solves number of islands in java
1 parent 97f179c commit 06be5bd

File tree

2 files changed

+53
-1
lines changed

2 files changed

+53
-1
lines changed

README.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -159,7 +159,7 @@
159159
| 191 | [Number of One Bits](https://leetcode.com/problems/number-of-1-bits) | [![Java](assets/java.png)](src/NumberOf1Bit.java) [![Python](assets/python.png)](python/number_of_1_bits.py) | |
160160
| 198 | [House Robber](https://leetcode.com/problems/house-robber) | [![Java](assets/java.png)](src/HouseRobber.java) [![Python](assets/python.png)](python/house_robber.py) | |
161161
| 199 | [Binary Tree Right Side View](https://leetcode.com/problems/binary-tree-right-side-view) | [![Java](assets/java.png)](src/BinaryTreeRightSideView.java) | |
162-
| 200 | [Number of Islands](https://leetcode.com/problems/number-of-islands) | | |
162+
| 200 | [Number of Islands](https://leetcode.com/problems/number-of-islands) | [![Java](assets/java.png)](src/NumberOfIslands.java) | |
163163
| 201 | [Bitwise AND of Numbers Range](https://leetcode.com/problems/bitwise-and-of-numbers-range) | | |
164164
| 202 | [Happy Number](https://leetcode.com/problems/happy-number) | [![Java](assets/java.png)](src/HappyNumber.java) [![Python](assets/python.png)](python/happy_number.py) | |
165165
| 203 | [Remove Linked List Elements](https://leetcode.com/problems/remove-linked-list-elements) | [![Java](assets/java.png)](src/RemoveLinkedListElements.java) [![Python](assets/python.png)](python/remove_linked_list_elements.py) | |

src/NumberOfIslands.java

+52
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
// https://leetcode.com/problems/number-of-islands
2+
// T: O(m * n)
3+
// T: O(m * n)
4+
5+
public class NumberOfIslands {
6+
private static final char VISITED = '0';
7+
private static final char ISLAND = '1';
8+
9+
public int numIslands(char[][] grid) {
10+
final int rows = grid.length, columns = grid[0].length;
11+
int islands = 0;
12+
13+
for (int row = 0 ; row < rows ; row++) {
14+
for (int column = 0 ; column < columns ; column++) {
15+
if (isIsland(grid[row][column])) {
16+
islands++;
17+
markIslandAsSeen(grid, row, column);
18+
}
19+
}
20+
}
21+
22+
return islands;
23+
}
24+
25+
private boolean isIsland(char c) {
26+
return c == ISLAND;
27+
}
28+
29+
private void markIslandAsSeen(char[][] grid, int row, int column) {
30+
if (!isValidPosition(grid, row, column) || !isIsland(grid[row][column])) return;
31+
markVisited(grid, row, column);
32+
markIslandAsSeen(grid, row - 1, column);
33+
markIslandAsSeen(grid, row, column + 1);
34+
markIslandAsSeen(grid, row + 1, column);
35+
markIslandAsSeen(grid, row, column - 1);
36+
}
37+
38+
private boolean isValidPosition(char[][] grid, int row, int column) {
39+
return row >= 0
40+
&& row < grid.length
41+
&& column >= 0
42+
&& column < grid[0].length;
43+
}
44+
45+
private boolean alreadyVisited(char c) {
46+
return c == VISITED;
47+
}
48+
49+
private void markVisited(char[][] grid, int row, int column) {
50+
grid[row][column] = VISITED;
51+
}
52+
}

0 commit comments

Comments
 (0)