Java
Rabbit_Sir
如果我写的回答哪里有不懂的请直接私信或留言
展开
-
100. 相同的树
package LeetCode.OneToFiveHundred;import LeetCode.TreeNode;public class OneHundred { public boolean isSameTree(TreeNode p, TreeNode q) { if (p == null && q == null) return true; if (p == null || q == null)原创 2020-08-07 21:49:31 · 236 阅读 · 2 评论 -
337. 打家劫舍 III(逐句解释代码)
package LeetCode.OneToFiveHundred;import LeetCode.TreeNode;import java.util.HashMap;public class ThreeHundredsAndThirtySeven { public int rob(TreeNode root) { HashMap<TreeNode, Integer> hashMap = new HashMap<>(); retur原创 2020-08-05 21:51:04 · 262 阅读 · 0 评论 -
415. 字符串相加(逐句解释代码)
package LeetCode.OneToFiveHundred;public class FourHundredsAndFourteen { public String addStrings(String num1, String num2) { // 用 StringBuffer 方便操作 StringBuffer sb = new StringBuffer(""); // 用双指针,根据加法法则,我们从后往前加,从 carry 来保存进位原创 2020-08-03 21:03:32 · 195 阅读 · 0 评论 -
114. 二叉树展开为链表(逐句解释代码)
package LeetCode.OneToFiveHundred;import LeetCode.TreeNode;import java.util.ArrayList;import java.util.List;public class OneHundredAndFourteen { private List<TreeNode> ans = new ArrayList<>(); public void flatten(TreeNode root) {原创 2020-08-02 21:31:50 · 123 阅读 · 0 评论 -
面试题 08.03. 魔术索引(逐句解释代码)
package LeetCode.面试题;public class FindMagicIndex { public int findMagicIndex(int[] nums) { return helper(nums,0,nums.length - 1); } private int helper(int[] nums, int left, int right){ // 前提条件 if (left > right) retu原创 2020-07-31 21:23:48 · 128 阅读 · 0 评论 -
104. 二叉树的最大深度(逐句解释代码)
今天的没啥说的 public int maxDepth(TreeNode root) { if (root == null) return 0; else { // 直接进行递归,找到左右中最大的返回 int left = maxDepth(root.left); int right = maxDepth(root.right); return Ma原创 2020-07-28 20:08:24 · 105 阅读 · 0 评论 -
410. 分割数组的最大值(逐句解释代码)
package LeetCode.OneToFiveHundred;import java.util.Arrays;public class FourHundredsAndForty { // dp public int splitArray(int[] nums, int m) { int len = nums.length; // 存储每次最小值 int[][] dp = new int[len + 1][m + 1];原创 2020-07-25 22:50:41 · 151 阅读 · 0 评论 -
1025. 除数博弈(逐句解释代码)
package LeetCode.OneThousandMore;public class OneThousandAndTwentyFive { public boolean divisorGame(int n) { // 用dp boolean[] dp = new boolean[n + 1]; // 因为先手 0 和 1 必输,没有选择 dp[0] = dp[1] = false; // 进行遍历,寻找可以赢的原创 2020-07-24 23:15:07 · 119 阅读 · 0 评论 -
64. 最小路径和(逐句解释代码)
package LeetCode.OneToFiveHundred;public class SixtyFour { // 记忆答案 private int[][] ans; public int minPathSum(int[][] grid) { int m = grid.length, n = grid[0].length; ans = new int[m][n]; // 进行搜索 return dfs(gri原创 2020-07-23 21:50:53 · 115 阅读 · 0 评论 -
剑指 Offer 11. 旋转数组的最小数字(逐句解释代码)
package LeetCode.剑指offer;public class MinArray { public int minArray(int[] numbers) { int start = 0, end = numbers.length - 1; while (start < end){ // 防止除法运算出错 int mid = (end - start) / 2 + start;原创 2020-07-22 22:11:00 · 104 阅读 · 0 评论 -
95. 不同的二叉搜索树 II(逐句解释代码)
package LeetCode.OneToFiveHundred;import LeetCode.TreeNode;import java.util.LinkedList;import java.util.List;public class NinetyFive { public List<TreeNode> generateTrees(int n) { if (n == 0) return new LinkedList<TreeNode>()原创 2020-07-21 21:38:45 · 128 阅读 · 0 评论 -
167. 两数之和 II - 输入有序数组(逐句解释代码)
package LeetCode.OneToFiveHundred;public class OneHundredAndSixtySeven { public int[] twoSum(int[] numbers, int target) { int len = numbers.length; if (len == 0) return new int[]{-1, -1}; for (int i = 0; i < len; i++){原创 2020-07-20 22:17:33 · 87 阅读 · 0 评论 -
35. 搜索插入位置(逐句解释代码)
package LeetCode.OneToFiveHundred;import java.util.Arrays;public class ThirtyFive { public int searchInsert(int[] nums, int target) { int len = nums.length; if (len == 0) return 0; // 可以进行查找,如果有的话,直接就返回能节省时间 int temp原创 2020-07-17 22:10:01 · 128 阅读 · 0 评论 -
96.不同的二叉搜索树(逐句解释代码)
public int numTrees(int n) { // 每个节点都可能做跟,所以有 n 种可能 // 当每个节点做跟的时候,左边共有 1 - i 个节点,右边共有 n - i 个节点 int[] dp = new int[n + 1]; // 边界处理,我们已知当 n 等于0或1的时候只有一种情况 dp[0] = 1; dp[1] = 1; // 状态转换方程为 f[i] += f...原创 2020-07-15 17:26:52 · 88 阅读 · 0 评论 -
350. 两个数组的交集 II(逐句解释代码)
package LeetCode.OneToFiveHundred;import java.util.Arrays;public class ThreeHundredsAndFifty { public int[] intersect(int[] nums1, int[] nums2) { int m = nums1.length, n = nums2.length; // 为空的情况 if (m == 0 || n == 0) return原创 2020-07-13 22:23:07 · 103 阅读 · 0 评论 -
174. 地下城游戏(逐句解释代码)
package LeetCode.OneToFiveHundred;public class OneHundredAndSeventhFour { // 记忆每次计算之后最小值 int[][] memo; public int calculateMinimumHP(int[][] dungeon) { int m = dungeon.length, n = dungeon[0].length; memo = new int[m][n];原创 2020-07-12 21:30:04 · 161 阅读 · 0 评论 -
Dijkstra算法图解及其实现(逐句解释代码以及思路)
图片来源图解:先上代码package study;public class Dijkstra { public int[] getShortestPaths(int[][] adjMatrix){ int len = adjMatrix.length; // 用于存放顶点 o 到其他顶点的最小距离 int[] result = new int[len]; // 表示是否遍历过 boolean[]原创 2020-07-09 21:26:26 · 409 阅读 · 0 评论 -
面试题 17.13. 恢复空格(逐句解释代码)
package LeetCode.面试题;import java.util.HashMap;import java.util.Map;public class Respace { public int respace(String[] dictionary, String sentence) { // 进行暴力寻找,找到字典中所有的能被找到的单词的长度 int len = sentence.length(); Map<String, I原创 2020-07-09 16:47:08 · 195 阅读 · 0 评论 -
面试题 16.11. 跳水板(逐句解释代码)
package LeetCode.面试题;public class DivingBoard { public int[] divingBoard(int shorter, int longer, int k) { if (k == 0) return new int[0]; if (shorter == longer) return new int[]{longer * k}; // 上面很好解释,一个是不用构建,因为 k 是0,另一个是长短相等,原创 2020-07-08 17:18:39 · 230 阅读 · 0 评论 -
112.路经总和(逐句解释代码)
package LeetCode.OneToFiveHundred;import LeetCode.TreeNode;public class OneHundredAndTwelve { public boolean hasPathSum(TreeNode root, int sum) { // 进行递归搜索 if (root == null) return false; // 特殊情况判断 if (root.left == n原创 2020-07-07 20:51:42 · 118 阅读 · 0 评论 -
63. 不同路径 II(逐句解释代码)
package LeetCode.OneToFiveHundred;public class SixthThree { public int uniquePathsWithObstacles(int[][] obstacleGrid) { int m = obstacleGrid.length, n = obstacleGrid[0].length; int[] dp = new int[n]; // 判断 [0][0] 是不是障碍原创 2020-07-06 22:02:58 · 136 阅读 · 0 评论 -
32. 最长有效括号(逐句解释代码)
package LeetCode.OneToFiveHundred;public class ThirtyTwo { public int longestValidParentheses(String s) { // 默认将‘(’置为 0 int max = 0; char[] cs = s.toCharArray(); int len = s.length(); int[] dp = new int[len];原创 2020-07-04 21:20:41 · 145 阅读 · 0 评论 -
108. 将有序数组转换为二叉搜索树(逐句解释代码)
package LeetCode.OneToFiveHundred;import LeetCode.TreeNode;public class OneHundredAndEight { public TreeNode sortedArrayToBST(int[] nums) { // 平衡二叉树的中序遍历是从小到大的,我们可以反向构造平衡二叉树 return inverseMiddleOrderTraversal(nums ,0 , nums.length -原创 2020-07-03 23:25:43 · 149 阅读 · 0 评论 -
378. 有序矩阵中第K小的元素(逐句解释代码)
今天先挖坑,明天来填归并排序的解法package LeetCode.OneToFiveHundred;import java.util.Arrays;public class ThreeHundredsAndSeventyEight { public int kthSmallest(int[][] matrix, int k) {// // 暴力法// int len = matrix.length;// int[] nums = new i原创 2020-07-02 23:10:19 · 145 阅读 · 0 评论 -
718. 最长重复子数组(逐句解释代码)
package LeetCode.FiveHundredOneToOneThousand;public class SevenHundredAndEighteen { public int findLength(int[] a, int[] b) {// // 暴力法// int ans = Integer.MIN_VALUE;// for (int i = 0; i < a.length; i++){// for (原创 2020-07-01 22:35:22 · 91 阅读 · 0 评论 -
16. 最接近的三数之和(逐句解释代码)
package LeetCode.OneToFiveHundred;import java.util.Arrays;public class Sixteen { public int threeSumClosest(int[] nums, int target) { // 排序,然后固定一个数,从后一个到末尾开始寻找 Arrays.sort(nums); int ans = nums[0] + nums[1] + nums[2];原创 2020-06-24 07:55:04 · 119 阅读 · 0 评论 -
14. 最长公共前缀(逐句解释代码)
package LeetCode.OneToFiveHundred;public class Fourteen { public String longestCommonPrefix(String[] strS) { // 暴力法破解,第一个字符串的长度进行遍历,与后面的所有的字符串进行对比 if (strS == null || strS.length == 0) return ""; int len = strS[0].length();原创 2020-06-15 21:17:44 · 101 阅读 · 0 评论 -
1300. 转变数组后最接近目标值的数组和(逐句解释代码)
package LeetCode.OneThousandMore;import java.util.Arrays;public class OneThousandAndThreeHundreds { public int findBestValue(int[] arr, int target) { // 思路是:先排序,然后按照四舍五入规则求取target与当前size-i个元素的整数平均值m。 // 如果,平均值小于等于当前arr[i],即最小值,则说明,v原创 2020-06-14 22:01:34 · 169 阅读 · 0 评论 -
15. 三数之和(逐句解释代码)
package LeetCode.OneToFiveHundred;import java.util.ArrayList;import java.util.Arrays;import java.util.List;public class Fifteen { public List<List<Integer>> threeSum(int[] nums) { // 这道题,我们要判度三数之和是否为0,我们可以对数组进行排序,对数组进行遍历原创 2020-06-12 21:21:04 · 257 阅读 · 0 评论 -
739. 每日温度(逐句解释代码)
package LeetCode.FiveHundredOneToOneThousand;import java.util.Deque;import java.util.LinkedList;public class SevenHundredAndThirtyNine { public int[] dailyTemperatures(int[] t) { // 我们用栈将 t 的下标进行记录,如果栈顶的值比栈底的值大,我们就移除比他大的数,并将两个下标相减进行记录原创 2020-06-11 21:47:08 · 154 阅读 · 0 评论 -
9. 回文数
这题没啥写的package LeetCode.OneToFiveHundred;public class Nine { public boolean isPalindrome(int x) { String str = String.valueOf(x); StringBuffer sb = new StringBuffer(str); sb.reverse(); StringBuffer sb1 = new StringBuff原创 2020-06-10 21:59:17 · 85 阅读 · 0 评论 -
面试题46. 把数字翻译成字符串(逐句解释代码)
package LeetCode.剑指offer;public class TranslateNum { public int translateNum(int num) { // 这道题我们可以首先把每个下标看成单独的数字进行翻译,然后和它的前一位进行合并 // 看他们是否合法,即前一位和当前为组合为 10 - 25,如果合法,就将其进行统计,否则就不计数 String str = String.valueOf(num); //原创 2020-06-09 21:41:22 · 145 阅读 · 0 评论 -
990. 等式方程的可满足性(逐句解释代码)
昨天的每日一题太难了,没费工夫看,就没写题解package LeetCode.FiveHundredOneToOneThousand;public class NineHundredAndNinety { public boolean equationsPossible(String[] equations) { // 把所有的式子用无向图来表示,用下标和内容来表示他们和它们的父节点 // 最初的父节点是自己,所以要进行初始化,然后把所有图的关系表示进去,下标代原创 2020-06-08 22:11:32 · 156 阅读 · 0 评论 -
128. 最长连续序列(逐句解释代码)
挖坑,明天填,今天配置Clion的opencv配置了五六个小时还没好,哎,烦死了class Solution { public int longestConsecutive(int[] nums) { Set<Integer> num_set = new HashSet<Integer>(); for (int num : nums) { num_set.add(num); } int原创 2020-06-06 22:16:07 · 115 阅读 · 0 评论 -
1122. 数组的相对排序(逐句解释代码)
package LeetCode.OneThousandMore;public class OneThousandOneHundredAndTwentyTwo { public int[] relativeSortArray(int[] arr1, int[] arr2) { // 进行计数排序 // 因为题目中最长长度为 1000 int [] nums = new int[1001]; // 将所有的数据都存入桶中原创 2020-06-05 23:05:48 · 234 阅读 · 0 评论 -
238. 除自身以外数组的乘积(逐句解释代码)
package LeetCode.OneToFiveHundred;public class TwoHundredAndThirtyEight { public int[] productExceptSelf(int[] nums) { // 我们可以记录每个下标的左右的值,然后计算每个下标左右值相乘即可 int len = nums.length; // 我们用answer记录左边的值相乘的结果 int[] answer = ne原创 2020-06-04 19:22:25 · 123 阅读 · 0 评论 -
837. 新21点(逐句解释代码)
package LeetCode.FiveHundredOneToOneThousand;public class EightHundredAndThirtySeven { public double new21Game(int N, int K, int W) { // 从 1 - w 抽卡,当大于 n 的时候小于 k 的概率 // 我们从最后一格开始计算几率,每次抽卡的概率都是 1/w,在 N 之前我们都可以一次抽卡就达到 // N 之后不行,原创 2020-06-03 22:02:19 · 174 阅读 · 0 评论 -
867. 转置矩阵(逐句解释代码)
package LeetCode.FiveHundredOneToOneThousand;public class EightHundredAndSixtySeven { public int[][] transpose(int[][] a) { // 按照题目所说将矩阵按照对角线进行转置 // 就是将原矩阵的行和列进行转换,所以我们直接把原矩阵复制,将原来的XY进行转置即可 int[][] answer = new int[a[0].length原创 2020-06-02 21:07:13 · 332 阅读 · 0 评论 -
1431. 拥有最多糖果的孩子(逐句解释代码)
package LeetCode.OneThousandMore;import java.util.ArrayList;import java.util.List;public class OneThousandFourHundredAndThirtyOne { public List<Boolean> kidsWithCandies(int[] candies, int extraCandies) { // 这是一道很简单的题目,我们可以将找出所有孩子中拥有糖原创 2020-06-01 21:54:15 · 177 阅读 · 0 评论 -
775. 全局倒置与局部倒置(逐句解释代码)
package LeetCode.FiveHundredOneToOneThousand;public class SevenHundredAndSeventhFive { public boolean isIdealPermutation(int[] a) { // 只要是局部倒置,就说明是全局倒置,所以我们可以找出非局部倒置 // 我们可以计算出每个区间的最小值,只要检查a[i] > a[i + 2:](Python语法,表示从i+2到数组末尾)、原创 2020-05-31 21:11:56 · 219 阅读 · 0 评论