-
前言
状态:62AC、63AC、343 不会。96 一刷先跳过。 -
更新
1 | 24-06-19 初始记录 |
初步题解
62 不同路径
题目链接:(https://leetcode.cn/problems/unique-paths)
-
确定
dp[m][n]
的含义:网格大小为 m x n 时的路径数 -
递推公式:
dp[m][n] = dp[m][n-1] + dp[m-1][n]
-
dp 数组的初始化:所有纵列横列为 1 的,都是 1。
-
遍历顺序:从前向后遍历。
-
打印 dp 数组(用于 debug)
1 | public static int uniquePaths(int m, int n) { |
63 不同路径 II
题目链接:(https://leetcode.cn/problems/unique-paths-ii)
这题的五部曲分析应该和上题一样。多了障碍格子,遇到障碍格子时,数计 0 (注意一下边界问题就行)。
1 | public int uniquePathsWithObstacles(int[][] obstacleGrid) { |
343 整数拆分
题目链接:(https://leetcode.cn/problems/integer-break/)
-
确定
dp[i]
的含义:正整数 i 的拆分最大化乘积。 -
递推公式:想不出来。🤕
-
dp 数组的初始化:
dp[2] = 1
。 -
遍历顺序:从前向后遍历。
-
打印 dp 数组(用于 debug)
96 不同的二叉搜索树
题目链接:(https://leetcode.cn/problems/unique-binary-search-trees)
看解析
62 不同路径
解析:(https://programmercarl.com/0062.不同路径.html)
有一个状态压缩版本:
1 | class Solution { |
63 不同路径 II
解析:(https://programmercarl.com/0063.不同路径II.html)
343 整数拆分
解析:(https://programmercarl.com/0343.整数拆分.html)
不是很懂,一刷先跳过了。
1 | public static int integerBreak(int n) { |
本题也可以用贪心,每次拆成 n 个 3,如果剩下是 4,则保留 4,然后相乘,但是这个结论需要数学证明其合理性! 🥴本来想这么写的,但是好像想错了。具体的数学推导:(https://leetcode.cn/problems/integer-break/solutions/29098/343-zheng-shu-chai-fen-tan-xin-by-jyd/)