leetcode Day8 栈

127 阅读1分钟

386. 字典序排数

法一:sort()直接排序

var lexicalOrder = function(n) {
    let res=[]
    for(let i=1;i<=n;i++){
        res.push(i)
    }
    return res.sort()
};

法二:深度优先搜索

var lexicalOrder = function(n) {
    let res=[]
    let number=1
    for(let i=0;i<n;i++){
        res.push(number)
        if(number*10<=n){
            number=number*10
        }
        else{
            while(number+1>n || number%10===9){
                number=Math.floor(number/10)
            }
            number++
        }
    }
    return res
};

590. N 叉树的后序遍历

var postorder = function(root) {
    if(!root)return []
    let res=[]
    const dfs=function(node){
        for(let i of node.children){
            dfs(i)
        }
        res.push(node.val)
    }
    dfs(root)
    return res
};

897. 递增顺序搜索树

var increasingBST = function(root) {
    let res=[]
    const dfs=function(node){
        if(!node){
            return
        }
        dfs(node.left)
        res.push(node.val)
        dfs(node.right)
    }
    dfs(root)
    let vroot=new TreeNode(-1)
    let cur=vroot
    for(let i of res){
        cur.right=new TreeNode(i)
        cur=cur.right
    }
    return vroot.right
};

1021. 删除最外层的括号

var removeOuterParentheses = function(s) {
    let stack=[]
    let res=''
    for(let i=0;i<s.length;i++){
        if(s[i]==='('){
            if(stack.length===0){
                stack.push(s[i])
            }else{
                res=res+s[i]
                stack.push(s[i])
            }
        }
        else {
            stack.pop()
            if(stack.length!==0){
                res=res+s[i]
            }
        }
    }
    return res
};

1441. 用栈操作构建数组

var buildArray = function(target, n) {
    let res=[]
    for(let i=1;i<=n;i++){
        if(target.indexOf(i)!==-1 && target.indexOf(i)!==target.length-1){
            res.push('Push')
        }
        else if(target.indexOf(i)==-1 && target.indexOf(i)!==target.length-1){
            res.push('Push','Pop')
        }
        else if(target.indexOf(i)!==-1 && target.indexOf(i)===target.length-1){
            res.push('Push')
            break
        }
    }
    return res
};

1475. 商品折扣后的最终价格

var finalPrices = function(prices) {
    let res=[]
    for(let i=0;i<prices.length;i++){
        for(let j=i+1;j<prices.length;j++){
            if(prices[j]<=prices[i]){
                res.push(prices[i]-prices[j])
                break
            }
        }
        if(res.length<=i){
            res.push(prices[i])
        }  
    }
    return res
};