1.17 剑指offer

79 阅读1分钟

31.栈的压入、弹出序列

// 明白题意就不难,一开始还把问题复杂化了,记住是栈顶元素对比。
var validateStackSequences = function (pushed, popped) {
    let res = [];
    if(pushed.length==0) return true;
    let i = 0;
    let j = 0;
    res.push(pushed[0]);
    while(i<pushed.length&&j<popped.length){
        if(res[res.length-1]==popped[j]){
            res.pop();
            j++;
        }
        else{
            res.push(pushed[++i])
        }
    }
    return res.length==0;
};

38.字符串的排列

// 应该试一下全排列的,这里调用一下set来去重。
var permutation = function (s) {
    s = s.split("");
    let visited = new Array(s.length).fill(true)
    let res = [];
    let dfs = (str) => {
        if (str.length == visited.length) {
            res.push(str);
            return;
        }
        for (let i = 0; i < visited.length; i++) {
            if (visited[i] == false) {
                continue
            }
            visited[i] = false;
            dfs(str + s[i]);
            visited[i] = true;
        }
    }
    dfs('');
    return Array.from(new Set(res));
};