ARTS-13

67 阅读2分钟

A

113. Path Sum II

刚开始想到的方法是,按照二叉树的先根遍历,并且是非递归的,在 root 为 null 时,表示到达了叶子节点,则判断当前的累加和是否为目标 target,如果是,则将当前的栈里的内容添加到 List 中。在栈弹出操作时,顺便也将当前累加和减去 pop 出的结点的值。

看上去好像可行,试了一下,只在结果恰好是最左侧的一列时是可行的,原因是,stack 中保存的并不是从根节点到当前结点的完整路径,比如当遍历到左子树的最右叶子结点时,此时的 stack 中只有一个值了,即为根节点,pop 出来根节点,获取根节点的右子树,再继续遍历。

顺着这个思路,感觉确实不好搞,然后转向了递归,最终还是翻了翻之前在剑指 offer 上做的一道一样的题目,才发现,递归的技巧在于,把“累加和”变为减去当前已经遍历的结点值之后的差值,再递归遍历左右子树。结束条件是,root 为 null,或者当前差值为 0 且当前结点为叶子结点。

R

Managing Android Multi-module Project with Gradle Plugin and Kotlin

★★★☆☆

使用 apply from 的方式导入和复用 build.gradle 是一个常见的方式,但也有其缺点;本文介绍了如何使用自定义 gradle 插件来实现类似功能,目的是方便在一个工程中管理多个 module;

使用该自定义的 gradle 插件,不仅起到了复用的作用,也可以实现每个 module 基于此插件的自定义和复写。

后面介绍了如何自定义该 gradle 插件,以及如何在插件中实现 

① apply 其他 plugin:project.plugins.apply("kotlin-android")

② 配置通用设置:compileSdkVersion 等;

③ 默认混淆配置

④ java 8:compileOptions sourceCompatibility = JavaVersion.VERSION_1_8 等;

⑤ 添加依赖:project.dependencies { add("implementation","androidx.core"core-ktx:1.0.2")}

⑥ Jacoco

最后介绍了该方式的好处: 每个 module 的 gradle 文件更简洁了、更容易迁移到 kotlin、可以在插件中扩展一些方法供使用者调用、易于统一维护 sdk 版本等。

T

线性布局和约束布局,高度都为 wrap_content,设置背景图时表现不一致,线性布局会变成背景图的高度,约束布局会表现为子 View 的高度;

S

《Android 文件存储路径相关 API》