1.计算字符串相加 LeetCode415
一位一位取出然后进行拼接
StringBuffer 用来操作字符串的拼接,拼接完成后进行 StringBuffer的reverse操作
2.最佳买卖股票的时机(几种题型总结)
2.1 LeetCode 121. 买卖股票的最佳时机
首先定义两个变量
buy (代表买当前该只股票花的钱)
sell(代表卖出当前该支股票后赚的钱)
然后对数组进行遍历只需要找出该只股票最便宜的时候将其赋值给buy 然后找出该只股票的 最高点然后计算 prices[i]-buy 赋给price即可
2.2LeetCode 122. 买卖股票的最佳时机 II
首先需要找出存在的状态
该题一共有两个状态
(1)当前持有股票 (状态0)
<1>今天刚买了一只股票
<2>昨天就有一只股票
(2) 当前不持有股票 (状态1)
<1>昨天就是没有股票
<2>昨天有股票但是今天卖掉了
由此可得出状态转移公式
dp[i][0] = Math.max(dp[i-1][1]-prices[i],dp[i-1][0]);
dp[i][1] = Math.max(dp[i-1][1],dp[i-1][0]+prices[i]);
2.3 LeetCode 714. 买卖股票的最佳时机含手续费
该题和2.2题一样 只是需要再状态(2)卖出股票时 减去手续费
// 今天卖完且交完手续费 跟买之前哪个多
sell =Math.max(sell,buy+prices[i]-fee);
// 前一天买的和今天买的哪个花的更少
buy =Math.max(buy,sell-prices[i]);
2.4LeetCode 309. 最佳买卖股票时机含冷冻期
该题具有三个状态
(1)当前持有股票
<1>昨天没有 今天刚买了一只股票
<2>昨天就有股票
(2)当前处在冷静期 (昨天刚卖完股票)
(3)当前不处于冷静期 也不持有股票
<1>刚过冷静期 今天啥也没买
<2>昨天也没买 今天也没买
由此可以得出状态转移方程
dp[i][0] = Math.max(dp[i-1][2]-prices[i],dp[i-1][0]);
dp[i][1] = dp[i-1][0] + prices[i];
dp[i][2] = Math.max(dp[i-1][2],dp[i-1][1]);
最后的最大值为三种状态下的最大值
Math.max(dp[n-1][0],dp[n-1][1],dp[n-1][2])