leetcode(js)

1.两数之和

/**
 * @param {number[]} nums
 * @param {number} target
 * @return {number[]}
 */
var twoSum = function(nums, target) {
    let arr = new Map()
    for(let i=0;i<nums.length;i++){
        let x = target - nums[i]
        if(!arr.has(nums[i])){
            arr.set(x,i)
        }else{
            return [arr.get(nums[i]),i]
        }
    }
};

map的用法,map.has(key),map.set(key,value),map.get(key)
这题先建立一个map,每次迭代前先判断map中是否含有当前元素num[i],例如第一次判断map中是否有key为2
没有就把7-0传入map,map现在就有(7:0,),当第二次判断map中是否有7,有,则返回(0,1)

var m = new Map([[‘Michael’, 95], [‘Bob’, 75], [‘Tracy’, 85]]);
由于一个key只能对应一个value,所以,多次对一个key放入value,后面的值会把前面的值冲掉

Set和Map类似,也是一组key的集合,但不存储value。由于key不能重复,所以,在Set中,没有重复的key。

对象的成员可以是任意类型

括号匹配

在这里插入图片描述

/**
 * @param {string} s
 * @return {boolean}
 */
var isValid = function(s) {
    let stack = []
    for(let i;i<s.length;i++){
        if(s[i]=='{'||s[i]=='['||s[i]=='('){
            stack.push(s[i])
        }else if(
            (s[i]=='}'&&stack.length-1=='{')||
            (s[i]==']'&&stack.length-1=='[')||
            (s[i]==')'&&stack.length-1=='(')
        ){
            stack.pop()
        }else{
            return false
        }
    }return stack.length==0
};

思路:用一个栈,碰见{[(就往栈里面放,碰见}])就让它与栈中的最后一位进行匹配,直到遍历完s数组后,判断是否栈为空,如果为空,则就是正确的括号匹配,如果不为空,则说明还有括号未完成匹配

爬楼梯.70

在这里插入图片描述

/**
 * @param {number} n
 * @return {number}
 */
var climbStairs = function(n) {
    if(n<=2)return n
    let arr = []
    arr[1] =1
    arr[2] =2
    for(let i=3;i<=n;i++){
        arr[i] = arr[i-1]+arr[i-2]
    }
    return arr[n]
};

94.二叉树中序遍历

/**
 * Definition for a binary tree node.
 * function TreeNode(val, left, right) {
 *     this.val = (val===undefined ? 0 : val)
 *     this.left = (left===undefined ? null : left)
 *     this.right = (right===undefined ? null : right)
 * }
 */
/**
 * @param {TreeNode} root
 * @return {number[]}
 */
var inorderTraversal = function(root) {
    let stack = []
    let arr = []
    while(root||stack.length){
        if(root){
            stack.push(root)
            root = root.left
        }else{
            root = stack.pop()
            arr.push(root.val)
            root = root.right
        }
    }
    return arr
};

二叉树的思想就是不能走常规,if判断左节点一直到左最深,else则是把root变成右节点,再往左节点if往下遍历,

最长回文子串

/**
 * @param {string} s
 * @return {string}
 */
var longestPalindrome = function(s) {
    function expand (s,l,r){
        // 这个l,r 相当于求一个中间值,拿到两边的看是否相等
        while(l >=0 && r < s.length && s[l] == s[r]){
            l--;
            r++;
        }
        return s.substring(l+1, r)
    }
    let res = ''
    for(let i = 0; i < s.length; i++){
        let s1 = expand(s, i ,i)
        let s2 = expand(s, i , i + 1)
        res = s1.length > res.length ? s1 : res
        res = s2.length > res.length ? s2 : res
    }
    return res
};

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

王源偷我华子抽

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值