1.三角形最小路径和
给定一个三角形,找出自顶向下的最小路径和。每一步只能移动到下一行中相邻的结点上。
思路:自底向上推
triangle[i][j] += min(triangle[i + 1][j], triangle[i + 1][j + 1])
2.单词拆分
给定一个非空字符串s和一个包含非空单词列表的字典wordDict,判定s是否可以被空格拆分为一个或者多个在字典中出现的单词。
拆分时可以重复使用字典中的单词。字典中没有重复的单词。
思路:类似于遍历的方法,新建一个数组state记录是否可以拆分,长度为s.length() + 1. state[ i - 1] 记录以下标i为结尾的s的子串是否可以拆分
3.乘积最大子序列
给定一个整数数组nums,找出一个序列中成绩最大的连续子序列
思路:因为存在符号问题,所以有两个dp数组(一正一负)。正dp数组可能由该元素(元素正,dp负),该元素×前面最大dp(元素正,dp正),该元素×前面最小dp(元素负,dp负)得来。