日常刷题0x8之德玛蹲草丛

108 阅读1分钟

此阶段给自己定的目标是:做过的这些题每天坚持继续刷二遍,每道题做过之后开始尝试多解法尝试解题。上一阶段是感知都有什么题目,此阶段主要系统化常规题解套路知识,牢记牢记此阶段目的。

题号:6
var convert = function (s, numRows) {

    //只有一行就返回
    if (numRows == 1) {
        return s
    }
    let arr = []
    for (let i = 0; i < numRows; i++) {
        arr[i] = []
    }
    //down字符元素摆放方向开始向下
    let row = 0, col = 0, down = true
    for (let i = 0; i < s.length; i++) {

        arr[row][col] = s[i]
        if (down) {
            //向下摆元素
            if (row == numRows - 1) {
                //到底了开始向上走
                col++
                row--
                down = !down
            } else {
                row++
            }
        } else {
            //开始向上摆元素
            if (row == 0) {
                //到顶了开始向下走
                row++
                down = !down
            } else {
                row--
                col++
            }
        }
    }
    let result = ''
    for (let i = 0; i < arr.length; i++) {
        for (let j = 0; j < arr[i].length; j++) {
            if (arr[i][j]) {
                result += arr[i][j]
            }
        }
    }
    return result
};
题号:993
//广度优先搜索
var isCousins = function (root, x, y) {

    let queue = [root]
    while (queue.length != 0) {
        let count = queue.length

        let tmpArr = []
        //一层一层来
        while (count != 0) {
            let node = queue.shift()
            if (node.left) {
                let obj = {}
                obj.node = node.left
                obj.parent = node
                tmpArr.push(obj)
                queue.push(node.left)
            }
            if (node.right) {
                let obj = {}
                obj.node = node.right
                obj.parent = node
                tmpArr.push(obj)
                queue.push(node.right)
            }
            count--
        }
        let xNode = null, yNode = null
        for (let idx = 0; idx < tmpArr.length; idx++) {
            let obj = tmpArr[idx]
            if (obj.node.val == x) {
                xNode = obj
            }
            if (obj.node.val == y) {
                yNode = obj
            }

            if (xNode && yNode) {
                console.log(xNode.parent);
                console.log(yNode.parent);
                if (xNode.parent !== yNode.parent) {
                    return true
                }
            }
        }
    }
    return false
};
题号:1442
//前缀和思想
var countTriplets = function (arr) {

    let prefixArr = new Array(arr.length + 1).fill(0)
    for (let idx = 1; idx <= arr.length; idx++) {
        prefixArr[idx] = prefixArr[idx - 1] ^ arr[idx - 1]
    }

    let i = 0, result = 0
    while (i <= arr.length) {
        let j = i + 1
        while (j <= arr.length) {
            let k = j
            while (k <= arr.length) {
                if (prefixArr[j - 1] ^ prefixArr[i - 1] == prefixArr[k] ^ prefixArr[j - 1]) {
                    result++
                }
                k++
            }
            j++
        }
        i++
    }
    return result
};