前端就该用 JS 刷算法16(补)

164 阅读2分钟

每日一题 -- 树

1022. 从根到叶的二进制数之和

1022. 从根到叶的二进制数之和

分析

  • 这一题和 129. 求根到叶子节点数字之和 很像,都是遍历一条路径的节点,然后求和
  • 这道题可以直接将对应的二进制值用字符串保存起来,到达叶子结点的时候再转也ok
  • 这里刚好学了位运算,直接每次都将上次的值带上,然后用 << 左移一位+当前值的方法求和,这样比较酷一点
  • 所以这种方法也很直观,可能也是为啥这道题是简单题的原因吧
// https://leetcode-cn.com/problems/sum-of-root-to-leaf-binary-numbers/
// 1022. 从根到叶的二进制数之和

/**
 * @分析
 * 这道题和 `129. 求根到叶子节点数字之和` 这题很像,只是这里求的是二进制,那边直接就是10进制的数字
 * 2. 由于已经给定节点再 1-1000之间,所以不需要根节点判空
 */
var sumRootToLeaf = function(root) {
    let res = 0
    const dfs = (root,sum) => {
        // 判断了再走节点,所以这里的 root 节点可定存在
        const temp=(sum<<1)+root.val
        if(!root.left && !root.right){
            // 到达叶子节点
            res+=temp
            return 
        }
        if(root.left) dfs(root.left,temp)
        if(root.right) dfs(root.right,temp)
    }
    dfs(root,0)
    return res
};

说明

  • 16号因为私事请假一天了,所以没有产出,今天补上
  • 其实很多时候觉得错过了就过了,这样补不就是掩耳盗铃嘛,如果真有恒心,依此为鉴,不是更好吗,错过了再补上,有自欺欺人。
  • 其实我以前一直是 杀不死我的终将使我强大的簇拥者,但是慢慢的发现,这个话可以,但是自己内心要知道自己只是一个很普通很普通的人,我要是能够强大都不需要打卡,不需要仪式感,不需要任何人的在意就能完成既定任务,今天铁定我就过去了。因为强大到,即使中间缺一个口子,也无所。
  • 但是我做不到啊,却一天打卡不是大事,但是就有那么点漏洞,总是让人有一种,既然上次都请假了,这次好累,也不做了吧,然后下下次。
  • 有的时候,自我欺骗也是一种内心的妥协,是为了更好的未来的善意的谎言,这次虽然有个疙瘩,回不去了,但是我可以催眠我自己,我其实还是一直在做的,我还要坚持,即使不完美的完成,也比中途而废更好。
  • 养成一个习惯很难的,尤其是这个习惯是属于你舒适区以外的,所以需要用到各种策略,来慢慢开疆辟土,使得舒适区的扩展。突如其来的意外,就像是未知区域的一次磨砺,虽然伤了,但是还在坚持不是吗?
  • 早起写算法是一个整体,昨天我早起但是没写;今天我做梦梦到自己8点没有起床,梦里的自己是对自己说的,昨天都没有完成,今天是周末,算了吧,没事,然后我就惊醒了,然后还是6点。我有如负重担的感觉,真的。所以我今天补上了,希望写算法这个习惯虽然断了,但是会拼接回来,以上