注册一亩三分地论坛,查看更多干货!
您需要 登录 才可以下载或查看附件。没有帐号?注册账号
x
本帖最后由 nunuh89 于 2018-7-14 12:56 编辑
我在做动态规划的时候,不是很清楚什么时候dp的size应该是A.length 还是A.length+1.比如是说下面的Jump Game,好像就用 boolean dp[] = new boolean[len]。
* * @param A: A list of integers * @return: A boolean */ public boolean canJump(int[] A) { // write your code here
if( A == null || A.length == 0){
return true;
}
int len = A.length;
boolean dp[] = new boolean[len];
dp[0] = true;
for(int i = 1; i < len; i++){
for(int j = 0; j < i; j++){
dp = dp[j] && (A[j] >= (i-j));
if(dp[i]){ break; } [/i]
[i]} [/i]
[i]} [/i]
[i]return dp[len-1]; [/i]
[i]}
但是,在其它题目里,比如说[color=rgba(0, 0, 0, 0.85)]Decode Ways[color=rgba(0, 0, 0, 0.85)] - [color=rgba(0, 0, 0, 0.85)]Java,就用到len+1。 请教大神们,看能否说明一下,什么时候用len,什么时候用len+1,谢谢!
ublic class Solution { /** * @param s: a string, encoded message * @return: an integer, the number of ways decoding */ public int numDecodings(String s) {[/i]
[i] // write your code here [/i]
[i]if(s == null || s.isEmpty()) return 0; [/i]
[i]int dp[] = new int[s.length()+1]; [/i]
[i]dp[0] = 1; [/i]
[i]dp[1] = s.charAt(0)=='0'?0: 1; [/i]
[i]for(int i = 2; i < s.length()+1; i++){ [/i]
[i]int first = Integer.valueOf(s.substring(i-1,i)); [/i]
[i]int second = Integer.valueOf(s.substring(i-2,i)); [/i]
[i]if(first > 0 && first <=9){ dp[i] += dp[i-1]; } [/i][/i]
[i][i]if(second >= 10 && second <=26){ dp[i] += dp[i-2]; } [/i][/i][/i]
[i][i][i]} [/i][/i][/i]
[i][i][i]return dp[s.length()]; [/i][/i][/i]
[i][i][i]}[/i][/i][/i]
[i][i][i]}
[/i][/i][/i]
|