动态规划步骤
1、确定状态(需要考虑到最后一步和子问题)
2、转移方程
3、确定初始条件和边界情况
4、计算顺序
class Solution {
public int coinChange(int[] coins, int amount) {
int[] f= new int[amount+1];
f[0] = 0;
for(int i =1; i<=amount ;i++){
f[i] = Integer.MAX_VALUE;
for(int j = 0 ; j < coins.length; j++){
if(i>=coins[j] && f[i-coins[j]] != Integer.MAX_VALUE){
f[i] = Math.min(f[i-coins[j]]+1,f[i]);
}
}
if(f[amount]==Integer.MAX_VALUE){
f[amount] = -1;
}
}
return f[amount];
}
}
class Solution {
public int uniquePaths(int m, int n) {
int[][] f = new int[m][n];
for(int i=0;i<m; i++){
for(int j=0 ;j<n;j++){
if(i==0 || j==0){
f[i][j] =1;
}
else{
f[i][j] = f[i-1][j]+f[i][j-1];
}
}
}
return f[m-1][n-1];
}
}