https://leetcode-cn.com/problems/coin-lcci/
[brainstorm]
1 n<0, what is return value?
2 n=0, is it corner case to be handled? what is return value?
3 dynamic programming, general case,
[brainstorm]
1 if n<0, cut branch, as solution does NOT exist
2 if n=0, solution exist.
3 dynamic programming
if revisit same sub problem, return stored result in DP structure
if this is new sub problem, solve it, store result in DP structure.
[bug code]
class Solution {
int[] dp;
public int waysToChange(int n) {
dp = new int[n+1];
dp[0] = 1;
for(int i=1;i<dp.length;i++){
dp[i] = -1;
}
dfs(n);
return dp[n];
}
int dfs(int n){
if(n<0){
return 0;
}
if(dp[n]!=-1){
return dp[n];
}
int sub1 = dfs(n-10);
int sub2 = dfs(n-5);
int sub3 = dfs(n-1);
//int sub4 = dfs(n-25);
//dp[n] = sub1+sub2+sub3+sub4;
dp[n] = sub1+sub2+sub3;
return dp[n];
}
}