1.动态规划,dp[i+1]=min(dp[i-1]+cost[i-1],dp[i-2]+cost[i-2])
class Solution {
public:
int minCostClimbingStairs(vector<int>& cost) {
int n=cost.size();
vector<int>dp(n+1);
dp[0]=0;
dp[1]=0;
for(int i=2;i<=n;i++){
dp[i]=min(dp[i-1]+cost[i-1],dp[i-2]+cost[i-2]);
}
return dp[n];
}
};
2.贪心
class Solution {
public:
bool canJump(vector<int>& nums) {
int n=nums.size();
int best=0;
for(int i=0;i<n;i++){
if(i<=best){
best=max(best,i+nums[i]);
if(best>=n-1){
return true;
}
}
}
return false;
}
};
3.dp
class Solution {
public:
int minSteps(int n) {
vector<int> f(n + 1);
for (int i = 2; i <= n; ++i) {
f[i] = INT_MAX;
for (int j = 1; j <= i; ++j) {
if (i % j == 0) {
f[i] = min(f[i], f[j] + i / j);
}
}
}
return f[n];
}
};