- 博客(83)
- 收藏
- 关注
原创 LeetCode617:合并二叉树
给你两棵二叉树:root1和root2。想象一下,当你将其中一棵覆盖到另一棵之上时,两棵树上的一些节点将会重叠(而另一些不会)。你需要将这两棵树合并成一棵新二叉树。合并的规则是:如果两个节点重叠,那么将这两个节点的值相加作为合并后节点的新值;否则,null 的节点将直接作为新二叉树的节点。返回合并后的二叉树。合并过程必须从两个树的根节点开始。示例。
2026-08-30 19:55:47
230
原创 LeetCode 543:巧解二叉树直径问题
摘要: LeetCode 543题要求计算二叉树的直径,即任意两节点间最长路径的边数。路径不一定经过根节点。解法采用深度优先搜索(DFS),递归计算左右子树的最大深度,并在过程中更新最大直径(左右子树深度之和)。Python、Java和C++实现均采用相似的后序遍历思路,时间复杂度O(n),空间复杂度O(h)(h为树高)。示例输入[1,2,3,4,5]的输出为3,对应路径如[4,2,1,3]。
2026-07-21 10:02:01
121
原创 LeetCode 538:二叉搜索树转换为累加树
LeetCode 538题要求将二叉搜索树转换为累加树,即每个节点的值变为原值加上所有比它大的节点值之和。解题思路是利用反向中序遍历(右-根-左),从大到小访问节点并累加值。提供了Python、Java和C++三种解法,均采用深度优先搜索(DFS)实现。Python解法使用nonlocal变量跟踪累加值,Java和C++则使用类成员变量。时间复杂度O(n),空间复杂度O(h),其中h为树高。
2026-07-21 09:01:04
295
原创 LeetCode 494:目标和问题解法精讲
摘要: LeetCode 494题要求通过为数组中的每个数字添加'+'或'-',构造表达式使其结果等于目标值target。解法包括回溯(易超时)和动态规划。动态规划将问题转化为求子集和,通过公式A=(sum+target)/2确定目标和,使用一维DP数组(倒序更新)统计方案数,避免重复计算。Python、Java和C++实现均展示了这一思路,核心在于将原问题转化为01背包问题求解。
2026-07-20 15:50:15
286
原创 揭秘汉明距离:二进制差异的奥秘
摘要: LeetCode 461题要求计算两个整数x和y的汉明距离,即二进制表示中不同位的数量。解法通过异或运算(x^y)将不同位标记为1,相同位标记为0,然后统计结果中1的个数。具体步骤:对异或结果逐位检查(通过&1取末位),累加1的计数,并右移移除已处理位。示例1(x=1,y=4)输出2,因二进制0001和0100有两位不同。提供Python、Java和C++实现,均采用相同逻辑,时间复杂度为O(1)。
2026-07-20 09:42:03
270
原创 LeetCode 448:找出数组中消失的数字
摘要:LeetCode 448题要求在包含n个整数的数组nums(元素范围[1,n])中找出所有缺失的数字。提供两种解法:(1)哈希法:通过集合存储已出现数字,遍历1~n检查缺失项,空间复杂度O(n);(2)原地修改法:利用数组下标映射,将出现数字对应位置的数值标记为负数,最后未标记的位置即为缺失数字,空间优化至O(1)。示例代码涵盖Python、Java和C++实现,均通过遍历和符号标记实现高效查找。例如输入[4,3,2,7,8,2,3,1]输出[5,6]。原地法通过索引取绝对值和符号翻转,避免额外存储。
2026-07-19 10:08:44
219
原创 滑动窗口巧解字符串异位词
本文介绍了LeetCode 438题寻找字符串异位词的滑动窗口解法。题目要求在字符串s中找到所有与p的异位词子串,返回起始索引。关键解法是使用定长滑动窗口(窗口大小等于p的长度),通过维护字符计数数组来高效匹配。Python/Java/C++实现均采用相同思路:初始化窗口后,每次滑动时更新字符计数,当窗口计数与目标匹配时记录索引。该算法时间复杂度O(n),空间复杂度O(1),适用于处理字符串匹配类问题,特别是需要统计字符频率的定长子串场景。
2026-07-19 09:25:21
363
原创 LeetCode437:二叉树路径和求解
LeetCode 437题要求计算二叉树中路径和等于目标值targetSum的路径数目。路径可以从任意节点开始,但方向必须向下(从父节点到子节点)。解题采用双重DFS方法:外层DFS遍历所有可能的起点节点,内层DFS统计以当前节点为起点的有效路径数。当节点值等于剩余目标和时计数,并递归处理左右子树。Python、Java和C++解法均遵循此思路,时间复杂度为O(n²)。示例输入root=[10,5,-3,3,2,null,11,3,-2,null,1],targetSum=8时输出3。
2026-07-18 15:23:28
49
原创 动态规划巧解数组等分问题
摘要:LeetCode 416题要求判断一个正整数数组是否能被分割成两个和相等的子集。解法核心是动态规划:1)若总和为奇数直接返回false;2)计算目标和(总和一半),初始化dp数组(dp[i]表示能否组成和i);3)遍历数组,更新dp状态。Python/Java/C++实现类似,通过状态转移检查是否能达到目标值。示例1的[1,5,11,5]因能组成11返回true,而[1,2,3,5]总和为11(奇数)返回false。算法时间复杂度为O(n×target),空间O(target)。
2026-07-18 10:35:35
304
原创 LeetCode406:重建身高队列精髓解析
摘要:LeetCode 406题要求根据身高和前面更高/等高人数重构队列。解法核心是先按身高降序、k值升序排序,然后逐个将元素插入结果数组的k位置。例如输入[[7,0],[4,4],[7,1],[5,0],[6,1],[5,2]],排序后依次插入,最终得到[[5,0],[7,0],[5,2],[6,1],[4,4],[7,1]]。Python/Java/C++实现均采用该策略,确保插入时前面已有足够多的高个子满足k值条件。
2026-07-17 18:41:36
314
原创 LeetCode 399:除法求值高效解法
本文探讨了LeetCode 399题(除法求值)的解决方案,采用带权并查集算法处理变量间的除法关系。给定变量对数组equations和实数值数组values表示等式关系(如a/b=2.0),以及查询数组queries,要求计算各查询的除法结果。若变量未定义或无法推导则返回-1.0。 算法核心: 带权并查集:每个变量作为节点,维护父节点指针和权重(当前节点/父节点的比值)。 路径压缩:在查找根节点时动态更新权重,保证weight[x]始终等于x/root。 连通块合并:处理等式时,若两变量根不同,通过数学推导
2026-07-17 10:36:23
582
原创 LeetCode 394:解码字符串的3种双栈解法
本文介绍了LeetCode 394题"字符串解码"的解决方案。题目要求解码形如k[encoded_string]的字符串,其中k表示括号内字符串的重复次数。解决方案采用双栈法:一个栈存储重复次数,另一个栈存储当前已拼接的字符串。当遇到左括号时保存当前状态,遇到右括号时取出栈顶元素进行字符串拼接,遇到普通字符时直接追加。文章提供了Python、Java和C++三种实现,其中Java需使用StringBuilder处理字符串拼接,而Python和C++可直接操作字符串。该方法能有效处理嵌套编
2026-07-16 10:44:35
451
原创 高效求解Top K高频元素:三大解法对比
LeetCode 347题要求找出数组中出现频率前k高的元素。提供了Python、Java和C++三种语言的解法,主要包括三种方法:1)原生数组排序(统计频次后排序);2)桶排序(按频次分桶);3)堆排序(维护大小为k的小根堆)。其中桶排序效率最高,时间复杂度为O(n)。不同语言实现逻辑相似,都是先统计频次,再通过排序或分桶提取前k个高频元素。
2026-07-16 09:38:17
291
原创 二进制计数技巧:动态规划解法
LeetCode 338题要求计算0到n每个整数的二进制表示中1的个数,并返回结果数组。通过动态规划优化:利用bits[i] = bits[i>>1] + (i&1)递推式,其中i>>1获取高位1的个数,i&1判断最低位是否为1。Python/Java/C++解法均采用这一核心思路,时间复杂度O(n),空间复杂度O(n)。示例展示了n=2输出[0,1,1],n=5输出[0,1,1,2,1,2]的结果。
2026-07-15 16:29:24
215
原创 小偷如何用DP偷遍二叉树?
摘要:LeetCode 337题描述了一个二叉树结构的房屋盗窃问题,要求在不触发警报(不能同时盗窃相邻父子节点)的情况下获取最大金额。通过动态规划解决,每个节点维护两个状态:盗窃该节点和不盗窃该节点的最大收益。采用后序遍历,先处理子节点再计算父节点,最终返回根节点的两种状态中的最大值。Python、Java和C++解法均通过DFS实现,时间复杂度O(n),空间复杂度O(n)。关键词:二叉树、动态规划、后序遍历、状态转移、最大收益。
2026-07-15 09:17:11
258
原创 动态规划:最少硬币凑金额问题详解
本文介绍了LeetCode 322题(零钱兑换)的三种语言解法。题目要求用给定面额的硬币凑出目标金额的最少硬币数,无法凑出则返回-1。三种解法均采用动态规划:初始化一个长度为amount+1的数组dp,存储凑出各金额的最少硬币数,初始值为无穷大(用amount+1表示)。边界条件dp[0]=0,然后遍历每个金额,尝试用每种硬币更新最优解。最终若dp[amount]未被更新则返回-1,否则返回该值。Python/Java/C++实现思路一致,时空复杂度均为O(n*amount)。
2026-07-13 14:39:54
190
原创 冷冻期股票交易:动态规划解法
【摘要】LeetCode 309题考察带冷冻期的股票买卖问题,要求在卖出后必须隔一天才能再次买入。该问题可以通过动态规划解决,定义三种状态:持有股票(0)、冷冻期(1)和非冷冻空仓(2)。状态转移逻辑为:持有股票可由前一日持有或前一日非冷冻空仓买入;冷冻期只能由前一日卖出股票得来;非冷冻空仓由前一日冷冻期解冻或持续空仓。Python/Java/C++解法均采用二维DP数组实现,时间复杂度O(n),空间复杂度O(n)。最终结果为最后一天冷冻期或非冷冻空仓状态的最大值。
2026-07-13 10:08:27
255
原创 动态规划与二分法破解最长递增子序列
本文介绍了解决最长递增子序列(LIS)问题的两种算法:动态规划和贪心+二分法。动态规划通过构建dp数组记录以每个元素结尾的最长子序列长度,时间复杂度O(n²),适合小数据量和需要详细结果的情况。贪心+二分法维护一个递增序列,利用二分查找优化到O(nlogn),适合大数据量且只需长度结果的情况。文章提供了Python、Java和C++三种语言的实现代码,并对比了两种方法的适用场景:动态规划通用但较慢,贪心+二分法高效但功能有限。
2026-07-12 15:53:56
534
原创 LeetCode 287:快慢指针巧解重复数
摘要: LeetCode 287题要求在包含n+1个整数的数组(数字范围[1,n])中找出唯一重复的数,且不能修改数组、仅使用O(1)空间。提供两种解法: 二分查找:通过统计小于等于中位数的元素数量,缩小重复数的范围(Python/Java/C++实现)。 快慢指针:将数组视为链表,利用环检测原理找到重复数(Floyd判圈算法,Python/Java/C++实现)。 示例:输入[1,3,4,2,2]输出2,输入[3,1,3,4,2]输出3。两种方法均满足约束条件,快慢指针时间复杂度O(n),空间O(1)。
2026-07-11 17:05:50
446
原创 双指针秒解:原地移动零元素
摘要: LeetCode 283题要求将数组中的所有0移动到末尾,同时保持非零元素的原始顺序。需原地操作,不能复制数组。使用双指针法:快指针遍历数组,慢指针标记非零元素位置。当快指针遇到非零元素时,与慢指针交换值,慢指针后移。最终所有0被交换至数组末尾。提供了Python、Java和C++的实现代码,均采用相同思路,时间复杂度O(n),空间复杂度O(1)。示例输入[0,1,0,3,12]输出[1,3,12,0,0]。
2026-07-11 11:11:08
381
原创 快速求解完全平方数的最少数量
LeetCode 279题要求找到组成整数n的最少完全平方数数量。完全平方数指1,4,9等整数的平方。提供两种解法: BFS解法:通过广度优先搜索,将问题转化为图的层序遍历,每次减去平方数直到归零,记录步数。 数学解法:基于拉格朗日四平方和定理与勒让德三平方和定理,判断n是否为1、2、3个平方数之和,否则返回4。 两种方法均给出Python、Java和C++实现,数学法效率更高(O(√n)),BFS法更直观(O(n^(3/2)))。示例中12=4+4+4输出3,13=4+9输出2。
2026-07-10 19:53:04
215
原创 高效搜索二维矩阵的三种解法
本文介绍了搜索二维矩阵的三种解法,针对每行从左到右、每列从上到下递增的特殊矩阵。暴力法直接遍历,时间复杂度O(mn);二分查找法对每行进行二分搜索,优化至O(mlogn);更优的对角查找法从右上角出发,根据当前值与target的比较决定左移或下移,实现O(m+n)时间复杂度。文章提供了Python、Java和C++三种语言的实现代码,其中对角查找法利用了矩阵的特殊性质,通过类似BST的搜索策略显著提升效率,是本题的最佳解法。
2026-07-09 14:58:01
158
原创 LeetCode238:乘积除自身的高效解法
题目摘要:LeetCode 238要求计算数组中每个元素除自身外的乘积,限制时间复杂度为O(n)且不能使用除法。例如输入[1,2,3,4],输出[24,12,8,6]。 解法思路: 双数组法:分别计算每个元素的左侧乘积(L数组)和右侧乘积(R数组),最后合并结果(L[i]*R[i])。 优化空间:利用输出数组动态存储左侧乘积,再通过反向遍历乘右侧乘积。 代码实现:提供Python、Java、C++的双数组和优化解法,均通过两次遍历实现O(n)时间复杂度和O(1)额外空间(优化版)。核心步骤为: 正向遍历计算
2026-07-08 10:34:08
197
原创 二叉树最近公共祖先解法全解析
LeetCode 236题解:二叉树的最近公共祖先 题目要求在二叉树中找到两个节点p和q的最近公共祖先(LCA)。LCA定义为深度最大的共同祖先节点,允许节点是自身的祖先。 解法1:递归法 递归遍历二叉树,若当前节点为p/q/null则直接返回。 分别在左右子树中递归查找p和q: 若左右子树均找到节点,说明当前节点就是LCA 否则返回非空的子树结果(即单边找到的节点) 解法2:标记DFS法 使用哈希表记录每个节点的父节点(DFS遍历) 从p节点向上回溯到根,标记访问路径 从q节点向上查找,第一个被标记的节点
2026-07-07 18:56:40
361
原创 高效判断回文链表的3种解法
LeetCode 234 回文链表解题摘要 题目要求判断单链表是否为回文结构。提供了Python、Java和C++三种语言的两种解法: 数组法:将链表值存入数组,判断数组是否与其逆序相同。时间复杂度O(n),空间复杂度O(n)。 快慢指针法: 使用快慢指针找到链表中点; 反转后半部分链表; 比较前半部分与反转后的后半部分是否一致。 时间复杂度O(n),空间复杂度O(1)。 核心点:快慢指针法通过反转链表优化了空间复杂度,适合链表操作。
2026-07-07 09:02:02
210
原创 轻松翻转二叉树:Python/Java/C++递归解法(简单)
本文展示了LeetCode 226题(翻转二叉树)的递归解法,提供了Python、Java和C++三种语言的实现。核心思路是:通过递归交换每个节点的左右子树来实现整棵二叉树的翻转。三种语言的解法逻辑一致:先处理空节点情况,然后交换当前节点的左右子节点,再递归处理左右子树,最后返回根节点。Python版本代码最简洁,直接使用元组交换语法;Java和C++版本则需要借助临时变量完成交换操作。时间复杂度为O(n),空间复杂度为O(h),其中n是节点数,h是树高度。
2026-07-06 17:12:45
180
原创 动态规划解最大正方形面积(多解)
摘要 LeetCode 221题要求在由'0'和'1'组成的二维矩阵中,找到仅含'1'的最大正方形面积。两种解法: 暴力法:遍历每个'1'作为左上角,逐步扩展边界检查是否全为'1',时间复杂度较高(O(mn*min(m,n)²))。 动态规划:定义dp[i][j]表示以(i,j)为右下角的最大正方形边长。状态转移方程为dp[i][j] = min(dp[i-1][j], dp[i][j-1], dp[i-1][j-1]) + 1,时间复杂度优化至O(mn)。 Python、Java、C++代码均通过动态规划
2026-07-06 08:43:17
379
原创 LeetCode215:快速查找第K大元素
摘要:LeetCode 215题要求在未排序数组中找到第k大的元素。直接解法是先排序后取第k个元素(O(nlogn)),但更优的方法是快速选择算法(平均O(n))。快速选择基于快速排序的分治思想:随机选择基准值将数组分为三部分(大于、等于、小于基准),根据k与子数组大小的关系递归处理对应区间。文中提供了Python、Java和C++的实现代码,均采用快速选择算法,核心步骤包括分区和递归处理子数组。该算法平均时间复杂度为O(n),最坏情况下为O(n²),空间复杂度为O(logn)递归栈开销。
2026-07-05 09:31:19
316
原创 掌握Trie树:高效处理字符串的秘密武器
本文介绍了LeetCode 208题关于Trie(前缀树)的实现。Trie是一种用于高效存储和检索字符串的树形结构,支持插入、查找完整单词和判断前缀是否存在三种操作。文章提供了Python、Java和C++三种语言的解法: 核心结构:每个节点包含26个子节点(对应a-z)和一个结束标志位 关键操作: insert:逐字符构建路径,末尾标记单词结束 search:检查路径存在且终点有结束标记 startsWith:仅验证路径存在性 代码共性:均使用字符到索引的转换(ch-'a')和递归遍历前缀路径的方法。 示
2026-07-04 09:07:27
192
原创 课程表问题:如何判断能否完成所有课程?
摘要 LeetCode 207 课程表问题要求判断能否完成所有课程(存在循环依赖则无法完成)。通过构建有向图检测环: DFS解法:使用三色标记法(0未访问/1访问中/2已完成),递归遍历时若遇到访问中节点说明存在环,时间复杂度O(V+E)。 BFS解法(拓扑排序):统计节点入度,将入度为0的节点入队,逐步移除并减少相邻节点入度,若最终处理节点数等于课程数则无环,时间复杂度O(V+E)。 提供Python、Java、C++三种语言的DFS/BFS实现,核心均为图的环检测。
2026-07-03 09:28:48
183
原创 LeetCode200:岛屿数量DFS与BFS详解(多语言)
LeetCode 200题要求计算二维网格中的岛屿数量('1'表示陆地,'0'表示水)。岛屿由水平或垂直相邻的陆地连接形成。给出Python、Java和C++的DFS/BFS解法: DFS:递归遍历相邻陆地并标记,统计连通块数。时间复杂度O(mn),空间复杂度O(mn)(递归栈)。 BFS:使用队列逐层扩散标记陆地。时间同样O(mn),空间O(min(m,n))(队列优化)。 对比: DFS适合路径类问题,代码简洁但可能栈溢出; BFS天然适合最短路径,空间消耗较大但无溢出风险。 示例1输出1(单岛屿),示
2026-07-02 10:18:01
211
原创 小偷最优偷窃策略:动态规划解法
摘要: LeetCode 198题“打家劫舍”要求在不触发相邻房屋警报的情况下,计算小偷能偷窃的最大金额。这是一个典型的动态规划问题,通过比较偷窃当前房屋与前一房屋的收益,递推最优解。解法包括Python、Java和C++实现,核心思想是维护一个dp数组,存储到每间房屋时的最大收益。动态规划适用于该问题的三大特征:最优子结构(全局最优由子问题最优组成)、重叠子问题(避免重复计算)和无后效性(状态只依赖前驱)。最终返回dp数组末尾值即为结果。
2026-07-01 09:33:06
253
原创 单链表反转:Python/Java/C++三解
摘要:LeetCode 206题要求反转单链表。给出Python、Java和C++三种语言的解法,包括:(1)数组翻转法(Python):用数组存储节点值后反向重建链表;(2)迭代法(通用):通过双指针(pre、cur)原地修改节点指向,时间复杂度O(n),空间O(1);(3)递归法(通用):递归到链表末端,逐层反转指针。核心步骤均为保存后继节点、反转当前指针、移动双指针。递归需注意终止条件(head为空或到达末节点)。各语言实现逻辑一致,仅语法差异。
2026-06-30 21:52:26
245
原创 LeetCode 169:多数元素解法全解析
本文介绍了LeetCode 169题"多数元素"的5种Python解法:1.哈希表法:使用Counter统计元素频率,返回频率最高者;2.排序法:排序后直接取中位数;3.随机化:随机选取候选元素验证;4.分治法:递归拆分数组,合并时比较左右区间候选;5.Boyer-Moore投票算法:O(1)空间复杂度,通过计数和抵消找出多数元素。所有方法均能高效解决问题,其中投票算法最优,时间O(n)空间O(1)。题目保证输入数组必含出现次数超n/2的元素。
2026-06-29 10:04:28
254
原创 双指针秒解链表相交问题
摘要:LeetCode 160题要求在无环单链表中找出两个链表的相交节点。主要解法包括:1)哈希表法,遍历存储一个链表节点地址,再遍历另一个链表查找重复地址;2)双指针法,两个指针分别遍历两个链表,到达末尾时交换起点,最终会在相交点相遇。提供了Python、Java和C++三种语言的实现代码,两种解法的时间复杂度均为O(m+n),空间复杂度分别为O(n)和O(1)。题目要求保持链表原始结构。
2026-06-28 15:53:12
275
原创 LeetCode 155:最小栈设计精解
LeetCode 155题要求设计一个最小栈(MinStack),支持常规栈操作(push、pop、top)并能以常数时间获取栈内最小值。摘要如下: 问题核心:在O(1)时间复杂度内实现getMin()方法。 解法思路: 辅助栈法:主栈存储元素,辅助栈同步存储当前最小值。空间复杂度O(n),但操作高效。 差值法:单栈存储元素与当前最小值的差值,通过差值还原原始值。空间优化至O(1)(均摊)。 代码示例: Python/Java/C++均提供两种实现,辅助栈法直观,差值法节省空间。 示例演示:如输入[-2,0
2026-06-28 10:36:57
209
原创 LeetCode152:动态规划求最大乘积子数组
摘要: LeetCode 152题要求找出整数数组中乘积最大的非空连续子数组。关键点在于处理负数乘积和零值分割。解法采用贪心策略,分段遍历数组:维护当前段乘积pre_p,记录第一个负数乘积first_neg。若当前乘积为负且存在更早的负数,则用除法调整子数组范围;遇到零时重置分段。Python/Java/C++实现均通过动态更新全局最大值解决,时间复杂度O(n)。示例:[2,3,-2,4]输出6(子数组[2,3]),[-2,0,-1]输出0(零截断子数组)。
2026-06-27 22:16:24
258
原创 LeetCode148:链表排序终极解法
摘要:LeetCode 148题要求对链表进行升序排序。Python解法提供两种方法:1)将链表值存入数组排序后重构链表(时间复杂度O(n log n),空间O(n));2)更优的归并排序+递归分治:通过快慢指针找中点分割链表,递归排序子链表后合并。Java和C++解法同样采用归并排序,关键步骤包括快慢指针定位中点、递归分治及双指针合并有序链表。所有解法均需注意链表断开和虚拟头节点的使用,确保时间复杂度为O(n log n),空间O(log n)(递归栈)。C++版本利用三目运算符简化合并收尾操作。
2026-06-26 20:39:04
286
原创 LeetCode146:LRU缓存详解
本文介绍了LeetCode 146题LRU缓存的Python实现方案。该方案采用哈希表结合双向链表的数据结构,哈希表用于O(1)时间查找,双向链表维护访问顺序。核心功能包括:初始化时设置容量;get操作获取值并将节点移至头部标记为最近使用;put操作更新/插入数据,超容时淘汰尾部最久未使用的节点。关键操作(添加、移除、移动节点)均保持O(1)时间复杂度。通过虚拟头尾节点简化边界处理,完整实现了LRU缓存机制。
2026-06-25 22:02:48
272
原创 LeetCode142:巧解链表环入口(多解)
LeetCode 142题要求检测链表中环的起始节点。提供两种解法:1)哈希表法,通过记录访问过的节点,遇到重复节点即为环起点;2)快慢指针法,先找到快慢指针相遇点,再用新指针从头同步移动直到相遇。两种方法在Python、Java和C++中的实现思路一致。哈希表法空间复杂度O(n),快慢指针法空间复杂度O(1)。后者数学证明当快慢指针相遇后,从头部同步移动的指针将与慢指针在环起点相遇。
2026-06-24 19:46:03
236
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅