Guess Number Higher or Lower II思路:刚开始的时候想到的不是动态规划,而是在(s,e)的范围内求出m,使得(s,m-1)=(m+1,e),结果发现两个问题,一个是不能使得两边相等时m靠左还是右,第二个问题更严重,因为题目中表示最后猜对的那一次是不要成本的。。。后来参考下,还是用dp来做。
动态规划方程:matrix[s][e]=m+Math.max(matrix[s][m-1],matrix[m+1][e]) 注意控制边界条件。
GitHub地址:https://github.com/corpsepiges/leetcode
public class Solution {
public int getMoneyAmount(int n) {
int[][] matrix=new int[n+1][n+1];
return pay(matrix,1,n);
}
public int pay(int[][] matrix,int s,int e){
if(s>=e){
return 0;
}
if(matrix[s][e]!=0){
return matrix[s][e];
}
int ans=Integer.MAX_VALUE;
for(int m=s;m<=e;m++){
int test=m+Math.max(pay(matrix,s,m-1),pay(matrix,m+1,e));
if(test<ans){
ans=test;
}
}
matrix[s][e]=ans;
return ans;
}
}