120. 三角形最小路径和
要求自顶到下的最短路径,只需要把从顶到各个位置的值都求出,最后再找出最底行的最小值即可。
因为当前位置可由其正上方或者斜上方得来,所以只需要初始化,第零列(没有左斜放)和斜的i=i(没有正上方)即可。
96. 不同的二叉搜索树
要求n个节点即长度为n的二叉搜索树的数目。只需遍历各个节点,将其当作头节点,因为取出了一个点,左边剩余长度为j-1,右边剩余长度为i-j,
所以长度为i的二叉搜索数的数目等于,以[1,i]分别为头节点的二叉搜索树之和。
343. 整数拆分
因为0=0+0,d[0]=00=0;1=1+0,d[1]=10=0所以ans[0]=ans[1]=0.。
对于每个数字,我们从1起[1,n),对其分解,先求出j(i-j)(i-j不需要再分解了)和jans[i-j](i-j还能再分解)。
再更新ans[i],求ans[i]和上述所得值得最大值。
62. 不同路径
初始化第一行第零行和第零列,之有一种走法。
ans[i][j] = ans[i - 1][j] + ans[i][j - 1];//到达此处有两条路
63. 不同路径 II
依旧初始化第零行和第零列,如果遇到障碍物直接退出,因为【到障碍物得路数为0】。
if(obstacleGrid[i][j] == 1) {
ans[i][j] = 0;
continue;
}
if(obstacleGrid[i][j] == 0) {
ans[i][j] = ans[i][j - 1] + ans[i - 1][j];
}