Skip to content

力扣

两数之和

给定一个整数数组和一个目标值,找出数组中和为目标值的两个数。 你可以假设每个输入只对应一种答案,且同样的元素不能被重复利用。 示例: 给定 nums = [2, 7, 11, 15], target = 9 因为 nums[0] + nums[1] = 2 + 7 = 9 所以返回 [0, 1]

javascript
// 暴力解法
function(nums, target) {
  for(let i=0;i<nums.length;i++){
    for(let j=i+1;j<nums.length;j++){
      if(nums[i]+nums[j]===target)return [i,j]
    }
  }
  return []
};
// hash表
function(nums,target){
  const map=new Map()
  for(let i=0;i<nums.length;i++){
   if(map.has(target-nums[i])){
    return [i,map.get(target-nums[i])]
   }else{
     map.set(nums[i],i)
   }
  }
  return []
}

路径总和

给定一个二叉树和一个目标和,判断该树中是否存在根节点到叶子节点的路径,这条路径上所有节点值相加等于目标和。 说明: 叶子节点是指没有子节点的节点。

javascript
// 广度优先遍历
function(root, targetSum) {
    if(!root) return false
    let nodes = [root]
    while(nodes.length){
        const current = nodes.pop()
        const isLeaf = !current.left && !current.right
        if(isLeaf && current.val ===targetSum){
            return true
        }

         if(current.left){
        current.left.val=current.left.val+current.val
        nodes.unshift(current.left)
         }   
         if(current.right){
        current.right.val=current.right.val+current.val
        nodes.unshift(current.right)
         }

    }
    return false
};

Released under the MIT License.