70. 爬楼梯 (dp)
如果是没错可以爬1-m阶楼梯的话,第二个for循环处 j<=m
class Solution {
public:
int climbStairs(int n) {
vector<int> dp(n+1,0);
dp[0] =1;
for(int i=1;i<=n;i++){
for(int j=1;j<=2;j++){
if(i>=j) dp[i] += dp[i-j];
}
}
return dp[n];
}
};
322. 零钱兑换
class Solution {
public:
int coinChange(vector<int>& coins, int amount) {
vector<int>dp(amount+1,INT_MAX);
dp[0] =0;
for(int i=0;i<=amount;i++){
for(int j=0;j<coins.size();j++){
if(i>=coins[j] && dp[i-coins[j]] != INT_MAX){
dp[i] = min(dp[i-coins[j]]+1,dp[i]);
}
}
}
if(dp[amount]==INT_MAX) return -1;
return dp[amount];
}
};
279.完全平方数
和322.零钱兑换一样
class Solution {
public:
int numSquares(int n) {
vector<int> dp(n+1,INT_MAX);
dp[0] =0;
for(int i = 1; i <= n; i++){
for(int j=0;j*j<=i;j++){
if(dp[i-j*j] != INT_MAX){
dp[i]=min(dp[i - j*j] + 1, dp[i]);
}
}
}
//肯定满足条件,所以不用判断
//if (dp[n] == INT_MAX) return -1;
return dp[n];
}
};