322. 零钱兑换
解题思路
代码实现
var coinChange = function(coins, amount) {
var dp = Array(amount + 1).fill(Infinity);
dp[0] = 0;
for(let j=0;j<=amount;j++){
for(let i=0;i<coins.length;i++){
if(j>=coins[i] && dp[j - coins[i]] !== Infinity){
dp[j] = Math.min(dp[j-coins[i]] +1, dp[j]);
}
}
}
return dp[amount] === Infinity ? -1 : dp[amount]
};
279.完全平方数
解题思路
代码实现
var numSquares = function(n) {
var dp = new Array(n+1).fill(Infinity);
dp[0] = 0
for(let i=1;i*i<=n;i++){
for(let j=i*i;j<=n;j++){
dp[j] = Math.min(dp[j-i*i]+1,dp[j]);
}
}
return dp[n] === Infinity?0:dp[n];
};
139.单词拆分
解题思路
代码实现
var wordBreak = function(s, wordDict) {
let dp = new Array(s.length+1).fill(false);
dp[0] = true;
for(let i=0;i<=s.length;i++){ //背包
for(let j=0;j<wordDict.length;j++){ //物品
if(i>=wordDict[j].length){
//包含i-wordDict[j].length, 不包含 i
if(s.slice(i-wordDict[j].length,i) === wordDict[j] && dp[i - wordDict[j].length]){
dp[i] = true;
}
}
}
}
return dp[s.length]
};