刷题日记2:数据不可变太可怕了

26 阅读1分钟

leetcode.cn/problems/pa…

路径总和2

本来以为对象在项目里面坑我就算了,在刷题里也坑我,!!! 这个题目本来我不是这么写的,是把这个写成tA.push(nodeArray),然后一直过不了,这是为什么呢,就是这个对象,犹豫被放到了tA里面的饮用可能有多个,你在改变前一个的时候,因为是同一个引用,后面的也跟着被改变了!!什么意思,画图:

image.png

var pathSum = function(root, targetSum) {
    if(!root)return []
    let tA=[[]]
    let ans=[]
    let queue=[root]
    let count=[0]
    while(queue.length){
        let node=queue.shift()
        let nodeArray=tA.shift()
        let s=count.shift()
        s+=node.val
        nodeArray.push(node.val)
        if(node.left==null&&node.right==null&&s==targetSum)ans.push(nodeArray)
        if(node.left){
            queue.push(node.left)
            tA.push([...nodeArray])
            count.push(s)
        }
        if(node.right){
            queue.push(node.right)
            tA.push([...nodeArray])
            count.push(s)
        }
    }
    return ans
};