随笔分类 - LeetCode
摘要:01背包 class Solution { public int findMaxForm(String[] strs, int m, int n) { /** * 这个背包有两个维度,一个是m 一个是n,物品就是字符串,重量就是字符串中的01个数,价值就是字符串个数,都是1 * dp[i][j]定义
阅读全文
摘要:01背包 import java.util.Arrays; class Solution { public int findTargetSumWays(int[] nums, int target) { int sum = Arrays.stream(nums).sum(); /** * 可以将数组
阅读全文
摘要:01背包 import java.util.Arrays; class Solution { public int lastStoneWeightII(int[] stones) { /** * 题意可以理解为,将石头尽可能分成相等的两份,最后差值就是最小剩余重量 * 剩下的部分和《416. 分割等
阅读全文
摘要:01背包 import java.util.Arrays; class Solution { public boolean canPartition(int[] nums) { int sum = Arrays.stream(nums).sum(); /** * 如果所有数的和为奇数,则不能平分 *
阅读全文
摘要:动态规划 class Solution { public int rob(TreeNode root) { int[] dp = robOrNot(root); return Math.max(dp[0], dp[1]); } /** * 对于每个节点来说,都有两个孩子,无法用一个dp[j]同时表达
阅读全文
摘要:动态规划 class Solution { public int rob(int[] nums) { if (nums.length == 1){ return nums[0]; } int[] dp = new int[nums.length]; int max = 0; /** * 重复两次《1
阅读全文
摘要:动态规划 class Solution { public int rob(int[] nums) { if (nums.length == 1){ return nums[0]; } /** * dp[i]定义为到达第i个房屋时总共可以偷到的最大金额 * 到第一个房屋时只能偷到其本身,到第二个房屋时
阅读全文
摘要:动态规划 class Solution { public int numDecodings(String s) { if (s.charAt(0) == '0'){ return 0; } int n = s.length(); /** * 定义dp[i]为长度为i的子串解码的总数,字符串为空默认也
阅读全文
摘要:完全背包 import java.util.Arrays; class Solution { public int numSquares(int n) { /** * dp[j]定义为和为j的完全平方数的最小个数 * 因为是求最小值,因此所有位置初始化为最大值 * 初始值dp[0] == 0 */
阅读全文
摘要:动态规划 class Solution { public int minPathSum(int[][] grid) { int m = grid.length; int n = grid[0].length; /** * dp[i][j]定义为从起点出发到当前这个点的最小路径和 * 初始值dp[0]
阅读全文
摘要:动态规划 import java.util.List; class Solution { public int minimumTotal(List<List<Integer>> triangle) { /** * 逆向思维 * 从下往上寻找最小路径,路径的条数越来越少,更容易找到 * 假设最后一行下
阅读全文
摘要:动态规划 class Solution { public int numTrees(int n) { /** * 定义dp[i]为i个节点可以组成的二叉搜索树的个数 * 0个节点也算一棵树 */ int[] dp = new int[n + 1]; dp[0] = 1; dp[1] = 1; /**
阅读全文
摘要:动态规划 class Solution { public int integerBreak(int n) { /** * 定义dp[i]为正整数i拆分结果的最大乘积 * 初始值dp[2] == 1 */ int[] dp = new int[n + 1]; dp[2] = 1; /** * 咋一看,
阅读全文
摘要:动态规划 class Solution { public int uniquePathsWithObstacles(int[][] obstacleGrid) { /** * 定义dp[i][j]为到达该坐标的路径总和 * 第一行和第一列的坐标,只能从左或者上进行访问 * 注意:如果有障碍物,那这一
阅读全文
摘要:动态规划 class Solution { public int uniquePaths(int m, int n) { /** * 定义dp[i][j]为到达该坐标的路径总和 * 第一行和第一列的坐标,只能从左或者上进行访问,其值初始化都为1 */ int[][] dp = new int[m][
阅读全文
摘要:动态规划 class Solution { public int minCostClimbingStairs(int[] cost) { /** * 最少有两个台阶,因此不用提前判断dp数组空指针异常的情况 * 索引从0开始 * dp[i]指的是到达第i个台阶并且向上爬所需要的最小费用 */ int
阅读全文
摘要:动态规划 class Solution { public int climbStairs(int n) { /** * 因为从第一层台阶开始,初始了dp[1]和dp[2] * 为了避免dp[2]空指针异常,提前判断一下 */ if (n < 2){ return n; } int[] dp = ne
阅读全文
摘要:动态规划 class Solution { public int fib(int n) { /** * 因为n从0开始,初始了dp[0]和dp[1] * 为了避免dp[1]空指针异常,提前判断一下 */ if (n < 1){ return n; } int[] dp = new int[n + 1
阅读全文
摘要:贪心 import java.util.Arrays; class Solution { public int findContentChildren(int[] g, int[] s) { /** * 贪心算法 * 将胃口大小和饼干大小排序,按照最大的饼干给最大的胃口的原则,依次分配饼干 * 如果
阅读全文
摘要:回溯 class Solution { public void solveSudoku(char[][] board) { backtracking(board); } public boolean backtracking(char[][] board) { /** * 递归遍历每个空位放9个数字
阅读全文

浙公网安备 33010602011771号