leetcode Day61 剑指专项 100-102

77 阅读1分钟

814. 二叉树剪枝

var pruneTree = function(root) {
    if (!root) {
        return null
    }
    root.left = pruneTree(root.left)
    root.right = pruneTree(root.right)
    if (!root.left && !root.right&& root.val === 0) {
        return null
    }
    return root
};

剑指 Offer II 100. 三角形中最小路径之和

var minimumTotal = function(triangle) {
    let l=triangle.length
    const dp=new Array(l).fill(0).map(()=>new Array(l).fill(0))
    dp[0][0]=triangle[0][0]
    for(let i=1;i<l;i++){
        dp[i][0]=dp[i-1][0]+triangle[i][0]
    }
    for(let i=1;i<l;i++){
        for(let j=1;j<i;j++){
            dp[i][j]=Math.min(dp[i-1][j],dp[i-1][j-1])+triangle[i][j]
        }
        dp[i][i]=dp[i-1][i-1]+triangle[i][i]
    }
    return Math.min(...dp[l-1])
};

剑指 Offer II 101. 分割等和子集

var canPartition = function(nums) {
    if(nums.length<2){
        return false
    }
    let sum=nums.reduce((a,b)=>a+b,0)
    if(sum%2!==0){
        return false
    }
    if(Math.max(...nums)>sum/2){
        return false
    }
    const dp=new Array(nums.length).fill(false).map(()=>new Array(sum/2+1).fill(false))
    for(let i=0;i<nums.length;i++){
        dp[i][0]=true
    }
    dp[0][nums[0]]=true
    for(let i=1;i<nums.length;i++){
        for(let j=1;j<sum/2+1;j++){
            if(nums[i]>j){
                dp[i][j]=dp[i-1][j]
            }else{
                dp[i][j]=(dp[i-1][j] || dp[i-1][j-nums[i]])
            }
        }
    }
    return dp[nums.length-1][sum/2]
};

剑指 Offer II 102. 加减的目标值

var findTargetSumWays = function(nums, target) {
    let sum=nums.reduce((a,b)=>a+b,0)
    if(sum-target<0 || (sum-target)%2!==0){
        return 0
    }
    let n=(sum-target)/2
    const dp=new Array(nums.length+1).fill(0).map(()=>new Array(n+1).fill(0))
    dp[0][0]=1
    for(let i=1;i<nums.length+1;i++){
        for(let j=0;j<n+1;j++){
            if(nums[i-1]>j){
                dp[i][j]=dp[i-1][j]
            }else{
                dp[i][j]=dp[i-1][j]+dp[i-1][j-nums[i-1]]
            }
        }
    }
    return dp[nums.length][n]
};