1、leetcode 120
var minimumTotal = function(triangle) {
// 获取三角形的长度
let length = triangle.length-1;
// 1、赋值temp为三角形最后一行
let temp = triangle[triangle.length-1];
// 3、循环 从三角形的倒数第二行(triangle.length-1)
// 到 三角形的第一行 (0)
for (let i = length-1; i >=0; i--) {
// 4、每一行从左至右循环 长度为triangle[i].length-1
for (let j = 0; j < triangle[i].length; j++) {
// 5、当前temp中的每一项为:triangle的当前行的每一项
// 与 下一行 优化后(是temp,不是triangle)的和
temp[j]=triangle[i][j]+Math.min(temp[j],temp[j+1])
}
}
// 2、需要的结果为 计算后的temp[0]的值
return temp[0];
};
2、leetcode 332
// 建立一个amount+1长度的数组 arr[i]存放amount==i时的最优解的值
// 从0开始计算数组 arr[amount]就是结果
var coinChange = function(coins, amount) {
// 边界值
if(amount==0){
return 0
}
// 利用最大值和当前值求一个最小值
let arr = Array(amount+1).fill(Number.MAX_VALUE);
// 数组边界值 计算arr后一项的基础
arr[0]=0;
// 外层 循环数组 知道计算出第amount项
for (let i = 0; i < arr.length; i++) {
// 内层 循环coins
for (let j = 0; j < coins.length; j++) {
// 当可以兑换零钱时 找到规律 得到arr[i]的值
if(i-coins[j]>=0){
//
arr[i]=Math.min(arr[i],arr[i-coins[j]]+1)
}
}
}
// 当第amount项没有被计算过 返回-1 否则arr[amount]
return arr[amount]==Number.MAX_VALUE?-1:arr[amount];
};