leetcode面试题 17.16. 按摩师
leetcode面试题 17.16. 按摩师
又一道动态规划题目
动态规划的核心就是总结出一个通行的方程.
但是这道题似乎不太适合使用递归的方式.
所以使用for循环遍历数组.
class Solution {
public int massage(int[] nums) {
if(nums.length==0)return 0;
if (nums.length==1)return nums[0];
//动态规划,这个采用了分类讨论的思想
//[2,7,9,3,1]为例
//如果你在7的位置上.有两种情况1.工作2.不工作
//于是用数组表示就是len[i][1]与len[i][0]
//这个二维数组的值记录经过的路径的总值
int [][] len=new int[nums.length][2];
len[0][0]=0;
len[0][1]=nums[0];
//遍历这个数组,用二维数组的值作为记录
for(int i=1;i<=nums.length-1;i++){
//假如你在9位置上
//len[i][0]代表你不工作
//有两种可能1.昨天你工作了2.昨天你不工作
//那么我们只要找出两种可能中最大的一种就可以
len[i][0]=Math.max(len[i-1][0],len[i-1][1]);
//如果jin'tian'gong
len[i][1]=len[i-1][0]+nums[i];
}
return Math.max(len[nums.length-1][0],len[nums.length-1][1]);
}
public static void main(String[] args) {
Solution solution = new Solution();
System.out.println(solution.massage(new int[]{2,7,9,3,1}));
}
}