原题链接375. 猜数字大小 II
题目下方给出了几个提示:
我们就按照上面的提示玩一把:猜数字大小 II。
当 n = 3,那么我们有 3 个选择:1 或 2 或 3。
假设我们先猜 1,就有两种情况:
如果你最先猜的是 2,同样会有两个可能的结果:
同样的,如果你最先猜 3,那么你最多需要花费 4¥。
所以,最先猜 2 才是最优选择,你最多花费 2¥。
参考下面的代码,你会看到这是一个十分自然的递归过程。(使用了二维矩阵缓存结果)
public class Solution {
private int[][]dp;
private int solve(int l, int r) {
if (l >= r) return 0;
// 说明 dp[l][r] 已经被计算过了,直接返回
if (dp[l][r] != Integer.MAX_VALUE) return dp[l][r];
for (int i = l; i <= r; ++i) {
dp[l][r] = Math.min(dp[l][r], Math.max(i + solve(l, i-1), i + solve(i+1, r)));
}
return dp[l][r];
}
public int getMoneyAmount(int n) {
dp = new int[n+1][n+1];
for (int[] row : dp)
Arrays.fill(row, Integer.MAX_VALUE);
return solve(1, n);
}
}
原文链接:https://harunscorner.wordpress.com/2016/09/04/leetcode-guess-number-higher-or-lower-ii-solution/
参考:http://www.cnblogs.com/grandyang/p/5677550.html
原文:https://www.cnblogs.com/fayin/p/10407176.html