diff --git a/src/main/java/g0101_0200/s0198_house_robber/Solution.java b/src/main/java/g0101_0200/s0198_house_robber/Solution.java new file mode 100644 index 000000000..b325a971b --- /dev/null +++ b/src/main/java/g0101_0200/s0198_house_robber/Solution.java @@ -0,0 +1,22 @@ +package g0101_0200.s0198_house_robber; + +public class Solution { + public int rob(int[] nums) { + if (nums.length == 0) { + return 0; + } + if (nums.length == 1) { + return nums[0]; + } + if (nums.length == 2) { + return Math.max(nums[0], nums[1]); + } + int[] profit = new int[nums.length]; + profit[0] = nums[0]; + profit[1] = Math.max(nums[1], nums[0]); + for (int i = 2; i < nums.length; i++) { + profit[i] = Math.max(profit[i - 1], nums[i] + profit[i - 2]); + } + return profit[nums.length - 1]; + } +} diff --git a/src/main/java/g0101_0200/s0199_binary_tree_right_side_view/Solution.java b/src/main/java/g0101_0200/s0199_binary_tree_right_side_view/Solution.java new file mode 100644 index 000000000..254f99bb4 --- /dev/null +++ b/src/main/java/g0101_0200/s0199_binary_tree_right_side_view/Solution.java @@ -0,0 +1,38 @@ +package g0101_0200.s0199_binary_tree_right_side_view; + +import com_github_leetcode.TreeNode; +import java.util.ArrayList; +import java.util.List; + +/* + * Definition for a binary tree node. + * public class TreeNode { + * int val; + * TreeNode left; + * TreeNode right; + * TreeNode() {} + * TreeNode(int val) { this.val = val; } + * TreeNode(int val, TreeNode left, TreeNode right) { + * this.val = val; + * this.left = left; + * this.right = right; + * } + * } + */ +public class Solution { + public List rightSideView(TreeNode root) { + List list = new ArrayList<>(); + recurse(root, 0, list); + return list; + } + + private void recurse(TreeNode node, int level, List list) { + if (node != null) { + if (list.size() < level + 1) { + list.add(node.val); + } + recurse(node.right, level + 1, list); + recurse(node.left, level + 1, list); + } + } +} diff --git a/src/main/java/g0101_0200/s0200_number_of_islands/Solution.java b/src/main/java/g0101_0200/s0200_number_of_islands/Solution.java new file mode 100644 index 000000000..7ffbde2b8 --- /dev/null +++ b/src/main/java/g0101_0200/s0200_number_of_islands/Solution.java @@ -0,0 +1,29 @@ +package g0101_0200.s0200_number_of_islands; + +public class Solution { + public int numIslands(char[][] grid) { + int islands = 0; + if (grid != null && grid.length != 0 && grid[0].length != 0) { + for (int i = 0; i < grid.length; i++) { + for (int j = 0; j < grid[0].length; j++) { + if (grid[i][j] == '1') { + dfs(grid, i, j); + islands++; + } + } + } + } + return islands; + } + + private void dfs(char[][] grid, int x, int y) { + if (x < 0 || grid.length <= x || y < 0 || grid[0].length <= y || grid[x][y] != '1') { + return; + } + grid[x][y] = 'x'; + dfs(grid, x + 1, y); + dfs(grid, x - 1, y); + dfs(grid, x, y + 1); + dfs(grid, x, y - 1); + } +} diff --git a/src/test/java/g0101_0200/s0198_house_robber/SolutionTest.java b/src/test/java/g0101_0200/s0198_house_robber/SolutionTest.java new file mode 100644 index 000000000..7ebac8792 --- /dev/null +++ b/src/test/java/g0101_0200/s0198_house_robber/SolutionTest.java @@ -0,0 +1,18 @@ +package g0101_0200.s0198_house_robber; + +import static org.hamcrest.CoreMatchers.equalTo; +import static org.hamcrest.MatcherAssert.assertThat; + +import org.junit.Test; + +public class SolutionTest { + @Test + public void rob() { + assertThat(new Solution().rob(new int[] {1, 2, 3, 1}), equalTo(4)); + } + + @Test + public void rob2() { + assertThat(new Solution().rob(new int[] {2, 7, 9, 3, 1}), equalTo(12)); + } +} diff --git a/src/test/java/g0101_0200/s0199_binary_tree_right_side_view/SolutionTest.java b/src/test/java/g0101_0200/s0199_binary_tree_right_side_view/SolutionTest.java new file mode 100644 index 000000000..4740bf27e --- /dev/null +++ b/src/test/java/g0101_0200/s0199_binary_tree_right_side_view/SolutionTest.java @@ -0,0 +1,24 @@ +package g0101_0200.s0199_binary_tree_right_side_view; + +import static org.hamcrest.CoreMatchers.equalTo; +import static org.hamcrest.MatcherAssert.assertThat; + +import com_github_leetcode.TreeNode; +import java.util.Arrays; +import org.junit.Test; + +public class SolutionTest { + @Test + public void rightSideView() { + TreeNode left = new TreeNode(2, null, new TreeNode(5)); + TreeNode right = new TreeNode(3, null, new TreeNode(4)); + TreeNode root = new TreeNode(1, left, right); + assertThat(new Solution().rightSideView(root), equalTo(Arrays.asList(1, 3, 4))); + } + + @Test + public void rightSideView2() { + TreeNode root = new TreeNode(1, null, new TreeNode(3)); + assertThat(new Solution().rightSideView(root), equalTo(Arrays.asList(1, 3))); + } +} diff --git a/src/test/java/g0101_0200/s0200_number_of_islands/SolutionTest.java b/src/test/java/g0101_0200/s0200_number_of_islands/SolutionTest.java new file mode 100644 index 000000000..5b14a2c58 --- /dev/null +++ b/src/test/java/g0101_0200/s0200_number_of_islands/SolutionTest.java @@ -0,0 +1,35 @@ +package g0101_0200.s0200_number_of_islands; + +import static org.hamcrest.CoreMatchers.equalTo; +import static org.hamcrest.MatcherAssert.assertThat; + +import org.junit.Test; + +public class SolutionTest { + @Test + public void numIslands() { + assertThat( + new Solution() + .numIslands( + new char[][] { + {'1', '1', '1', '1', '0'}, + {'1', '1', '0', '1', '0'}, + {'1', '1', '0', '0', '0'}, + {'0', '0', '0', '0', '0'} + }), + equalTo(1)); + } + + public void numIslands2() { + assertThat( + new Solution() + .numIslands( + new char[][] { + {'1', '1', '0', '0', '0'}, + {'1', '1', '0', '0', '0'}, + {'0', '0', '1', '0', '0'}, + {'0', '0', '0', '1', '1'} + }), + equalTo(3)); + } +}