leetcode
文章平均质量分 52
Zyy~
我们曾如此渴望命运的波澜,到最后才发现:人生最曼妙的风景,竟是内心的淡定与从容……我们曾如此期盼外界的认可,到最后才知道:世界是自己的,与他人毫无关系!
展开
-
《leetcode》约瑟夫环《数学》
剑指 Offer 62. 圆圈中最后剩下的数字难度简单4480,1,···,n-1这n个数字排成一个圆圈,从数字0开始,每次从这个圆圈里删除第m个数字(删除后从下一个数字开始计数)。求出这个圆圈里剩下的最后一个数字。例如,0、1、2、3、4这5个数字组成一个圆圈,从数字0开始每次删除第3个数字,则删除的前4个数字依次是2、0、4、1,因此最后剩下的数字是3。示例 1:输入: n = 5, m = 3输出: 3示例 2:输入: n = 10, m = 17输出: 2限制:1 <原创 2021-09-27 18:46:59 · 135 阅读 · 0 评论 -
《leetcode》剪绳子(I,II)《动态规划》
剑指 Offer 14- I. 剪绳子难度中等300给你一根长度为 n 的绳子,请把绳子剪成整数长度的 m 段(m、n都是整数,n>1并且m>1),每段绳子的长度记为 k[0],k[1]...k[m-1] 。请问 k[0]*k[1]*...*k[m-1] 可能的最大乘积是多少?例如,当绳子的长度是8时,我们把它剪成长度分别为2、3、3的三段,此时得到的最大乘积是18。示例 1:输入: 2输出: 1解释: 2 = 1 + 1, 1 × 1 = 1示例 2:输入: 10输出: 3原创 2021-09-26 16:43:30 · 144 阅读 · 0 评论 -
《leetcode》寻找旋转数组中的最小值(I,II)《二分查找》
153. 寻找旋转排序数组中的最小值难度中等568已知一个长度为 n 的数组,预先按照升序排列,经由 1 到 n 次 旋转 后,得到输入数组。例如,原数组 nums = [0,1,2,4,5,6,7] 在变化后可能得到:若旋转 4 次,则可以得到 [4,5,6,7,0,1,2]若旋转 7 次,则可以得到 [0,1,2,4,5,6,7]注意,数组 [a[0], a[1], a[2], ..., a[n-1]] 旋转一次 的结果为数组 [a[n-1], a[0], a[1], a[2], ...,原创 2021-09-26 15:28:16 · 172 阅读 · 0 评论 -
《leetcode》剑指 Offer 07. 重建二叉树(前序中序)《树》
剑指 Offer 07. 重建二叉树难度中等567输入某二叉树的前序遍历和中序遍历的结果,请构建该二叉树并返回其根节点。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。示例 1:Input: preorder = [3,9,20,15,7], inorder = [9,3,15,20,7]Output: [3,9,20,null,null,15,7]示例 2:Input: preorder = [-1], inorder = [-1]Output: [-1]限制:0 <原创 2021-09-26 14:52:17 · 133 阅读 · 0 评论 -
《leetcode》旋转矩阵《模拟》
54. 螺旋矩阵难度中等870给你一个 m 行 n 列的矩阵 matrix ,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素。示例 1:输入:matrix = [[1,2,3],[4,5,6],[7,8,9]]输出:[1,2,3,6,9,8,7,4,5]示例 2:输入:matrix = [[1,2,3,4],[5,6,7,8],[9,10,11,12]]输出:[1,2,3,4,8,12,11,10,9,5,6,7]提示:m == matrix.lengthn == matri原创 2021-09-26 13:29:56 · 134 阅读 · 0 评论 -
《leetcode》两数之和,三数之和,四数之和《双指针》
1. 两数之和难度简单12203给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。你可以按任意顺序返回答案。示例 1:输入:nums = [2,7,11,15], target = 9输出:[0,1]解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。示例 2:输入:nums = [原创 2021-09-26 12:46:55 · 82 阅读 · 0 评论 -
《leetcode》146. LRU 缓存机制(两种方式)《双向循环链表》
146. LRU 缓存机制运用你所掌握的数据结构,设计和实现一个 LRU (最近最少使用) 缓存机制 。实现 LRUCache 类:LRUCache(int capacity) 以正整数作为容量 capacity 初始化 LRU 缓存int get(int key) 如果关键字 key 存在于缓存中,则返回关键字的值,否则返回 -1 。void put(int key, int value) 如果关键字已经存在,则变更其数据值;如果关键字不存在,则插入该组「关键字-值」。当缓存容量达到上限时,原创 2021-09-12 08:02:48 · 143 阅读 · 0 评论 -
《leetcode》剑指 Offer 51. 数组中的逆序对《归并排序》
剑指 Offer 51. 数组中的逆序对难度困难427在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数。示例 1:输入: [7,5,6,4]输出: 5限制:0 <= 数组长度 <= 50000解析: 归并排序, 如果mid之后的数排到前面了,那么re+=这个数原来位置之前的比他大的数的个数。模板题。时间复杂度O(nlogn) 空间复杂度 O(n)代码:class Solution {原创 2021-06-03 20:08:28 · 101 阅读 · 0 评论 -
《leetcode》剑指 Offer 19. 正则表达式匹配《动态规划》
剑指 Offer 19. 正则表达式匹配难度困难231请实现一个函数用来匹配包含'. '和'*'的正则表达式。模式中的字符'.'表示任意一个字符,而'*'表示它前面的字符可以出现任意次(含0次)。在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字符串"aaa"与模式"a.a"和"ab*ac*a"匹配,但与"aa.a"和"ab*a"均不匹配。示例 1:输入:s = "aa"p = "a"输出: false解释: "a" 无法匹配 "aa" 整个字符串。示例 2:输入:s = "a原创 2021-06-03 19:19:14 · 110 阅读 · 0 评论 -
《leetcode》剑指 Offer 60. n个骰子的点数《动态规划》
剑指 Offer 60. n个骰子的点数把n个骰子扔在地上,所有骰子朝上一面的点数之和为s。输入n,打印出s的所有可能的值出现的概率。你需要用一个浮点数数组返回答案,其中第 i 个元素代表这 n 个骰子所能掷出的点数集合中第 i 小的那个的概率。示例 1:输入: 1输出: [0.16667,0.16667,0.16667,0.16667,0.16667,0.16667]示例 2:输入: 2输出: [0.02778,0.05556,0.08333,0.11111,0.13889,0.16667原创 2021-06-01 16:06:58 · 106 阅读 · 0 评论 -
《leetcode》剑指 Offer 09. 用两个栈实现队列《辅助栈》
剑指 Offer 09. 用两个栈实现队列用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead 操作返回 -1 )示例 1:输入:[“CQueue”,“appendTail”,“deleteHead”,“deleteHead”][[],[3],[],[]]输出:[null,null,3,-1]示例 2:输入:[“CQueue”,“delete原创 2021-05-05 12:30:16 · 73 阅读 · 0 评论 -
《leetcode》剑指 Offer 33. 二叉搜索树的后序遍历序列《单调栈》
剑指 Offer 33. 二叉搜索树的后序遍历序列难度中等253输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历结果。如果是则返回true,否则返回false。假设输入的数组的任意两个数字都互不相同。参考以下这颗二叉搜索树: 5 / \ 2 6 / \ 1 3示例 1:输入: [1,6,3,2,5]输出: false示例 2:输入: [1,3,2,6,5]输出: true提示:数组长度 <= ...转载 2021-05-04 22:52:30 · 112 阅读 · 0 评论 -
《leetcode》169. 多数元素 229. 求众数 II《摩尔投票》
169. 多数元素难度简单963给定一个大小为n的数组,找到其中的多数元素。多数元素是指在数组中出现次数大于⌊ n/2 ⌋的元素。你可以假设数组是非空的,并且给定的数组总是存在多数元素。示例1:输入:[3,2,3]输出:3示例2:输入:[2,2,1,1,1,2,2]输出:2进阶:尝试设计时间复杂度为 O(n)、空间复杂度为 O(1) 的算法解决此问题。Code:class Solution { //摩尔投票法:先假...原创 2021-04-22 16:11:46 · 93 阅读 · 0 评论 -
《动态规划》1143. 最长公共子序列《leetcode》
1143. 最长公共子序列给定两个字符串 text1 和 text2,返回这两个字符串的最长 公共子序列 的长度。如果不存在 公共子序列 ,返回 0 。一个字符串的 子序列 是指这样一个新的字符串:它是由原字符串在不改变字符的相对顺序的情况下删除某些字符(也可以不删除任何字符)后组成的新字符串。例如,“ace” 是 “abcde” 的子序列,但 “aec” 不是 “abcde” 的子序列。两个字符串的 公共子序列 是这两个字符串所共同拥有的子序列。示例 1:输入:text1 = “abcde”,原创 2021-04-03 22:08:33 · 168 阅读 · 0 评论 -
《Dp》面试题 17.21. 直方图的水量《leetcode》
面试题 17.21. 直方图的水量难度困难121给定一个直方图(也称柱状图),假设有人从上面源源不断地倒水,最后直方图能存多少水量?直方图的宽度为 1。上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的直方图,在这种情况下,可以接 6 个单位的水(蓝色部分表示水)。感谢 Marcos贡献此图。示例:输入: [0,1,0,2,1,0,1,3,2,1,2,1]输出: 6通过次数15,503提交次数24,296Code:dpclass Solut..原创 2021-04-02 11:11:42 · 78 阅读 · 0 评论 -
《子集》90. 子集 II(回溯+状态压缩+set)《leetcode》
90. 子集 II给你一个整数数组 nums ,其中可能包含重复元素,请你返回该数组所有可能的子集(幂集)。解集 不能 包含重复的子集。返回的解集中,子集可以按 任意顺序 排列。示例 1:输入:nums = [1,2,2]输出:[[],[1],[1,2],[1,2,2],[2],[2,2]]示例 2:输入:nums = [0]输出:[[],[0]]提示:1 <= nums.length <= 10-10 <= nums[i] <= 10代码:回溯思想//回溯原创 2021-03-31 11:21:17 · 91 阅读 · 0 评论 -
《字典树》208. 实现 Trie (前缀树)《leetcode》
题目实现 Trie (前缀树)Trie(发音类似 “try”)或者说 前缀树 是一种树形数据结构,用于高效地存储和检索字符串数据集中的键。这一数据结构有相当多的应用情景,例如自动补完和拼写检查。请你实现 Trie 类:Trie() 初始化前缀树对象。void insert(String word) 向前缀树中插入字符串 word 。boolean search(String word) 如果字符串 word 在前缀树中,返回 true(即,在检索之前已经插入);否则,返回 false 。b原创 2021-03-30 11:50:22 · 169 阅读 · 0 评论 -
《快排模板》75. 颜色分类《leetcode》
75. 颜色分类难度中等829给定一个包含红色、白色和蓝色,一共n个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。此题中,我们使用整数0、1和2分别表示红色、白色和蓝色。示例 1:输入:nums = [2,0,2,1,1,0]输出:[0,0,1,1,2,2]示例 2:输入:nums = [2,0,1]输出:[0,1,2]示例 3:输入:nums = [0]输出:[0]示例 4:输入:...原创 2021-03-26 21:34:10 · 95 阅读 · 0 评论 -
《树》从中序与后序遍历序列构造二叉树《建树》
题目:106. 从中序与后序遍历序列构造二叉树根据一棵树的中序遍历与后序遍历构造二叉树。注意:你可以假设树中没有重复的元素。例如,给出中序遍历 inorder = [9,3,15,20,7]后序遍历 postorder = [9,15,7,20,3]返回如下的二叉树:**3/ \9 20/ \15 7代码:**```java/** * Definition for a binary tree node. * public class TreeNo原创 2021-03-19 22:04:01 · 107 阅读 · 0 评论 -
《leetcode》寒假刷前缀和《前缀和》
303. 区域和检索 - 数组不可变难度简单236给定一个整数数组 nums,求出数组从索引i到j(i≤j)范围内元素的总和,包含i、j两点。实现NumArray类:NumArray(int[] nums)使用数组nums初始化对象 int sumRange(int i, int j)返回数组nums从索引i到j(i≤j)范围内元素的总和,包含i、j两点(也就是sum(nums[i], nums[i + 1], ... , nums[j]))...原创 2021-02-22 16:45:44 · 91 阅读 · 0 评论 -
寒假刷双指针《双指针》
1.普通双指针。633. 平方数之和难度中等163给定一个非负整数c,你要判断是否存在两个整数a和b,使得a2+ b2= c。示例 1:输入:c = 5输出:true解释:1 * 1 + 2 * 2 = 5示例 2:输入:c = 3输出:false示例 3:输入:c = 4输出:true示例 4:输入:c = 2输出:true示例 5:输入:c = 1输出:true//时间复杂度 根号nclas...原创 2021-02-17 16:21:05 · 115 阅读 · 0 评论 -
二分查找模板
模板代码:import java.util.ArrayList;public class a { public static int bSearch(int arr[],int target) { int n=arr.length; int l=0; int r=n-1; while(l<r) { int mid=l+(r-l)/2;//防止mid值过大越界 if(arr[mid]==target) return mid; if(arr[mid]原创 2021-01-30 14:14:45 · 131 阅读 · 1 评论 -
《前缀和》724. 寻找数组的中心索引《leetcode》
724. 寻找数组的中心索引难度简单264收藏分享切换为英文接收动态反馈给定一个整数类型的数组nums,请编写一个能够返回数组“中心索引”的方法。我们是这样定义数组中心索引的:数组中心索引的左侧所有元素相加的和等于右侧所有元素相加的和。如果数组不存在中心索引,那么我们应该返回 -1。如果数组有多个中心索引,那么我们应该返回最靠近左边的那一个。示例 1:输入:nums = [1, 7, 3, 6, 5, 6]输出:3解释:索引 3 (nums[3] = 6) ...原创 2021-01-28 12:05:52 · 82 阅读 · 0 评论 -
《leetcode》189. 旋转数组《翻转数组》
189. 旋转数组难度中等848给定一个数组,将数组中的元素向右移动k个位置,其中k是非负数。进阶:尽可能想出更多的解决方案,至少有三种不同的方法可以解决这个问题。 你可以使用空间复杂度为O(1) 的原地算法解决这个问题吗?示例 1:输入: nums = [1,2,3,4,5,6,7], k = 3输出: [5,6,7,1,2,3,4]解释:向右旋转 1 步: [7,1,2,3,4,5,6]向右旋转 2 步: [6,7,1,2,3,4,5]向右旋...原创 2021-01-10 20:15:46 · 192 阅读 · 0 评论 -
《拓扑排序》210. 课程表 II《leetcode》
210. 课程表 II难度中等316现在你总共有n门课需要选,记为0到n-1。在选修某些课程之前需要一些先修课程。例如,想要学习课程 0 ,你需要先完成课程1 ,我们用一个匹配来表示他们:[0,1]给定课程总量以及它们的先决条件,返回你为了学完所有课程所安排的学习顺序。可能会有多个正确的顺序,你只要返回一种就可以了。如果不可能完成所有课程,返回一个空数组。示例1:输入: 2, [[1,0]] 输出: [0,1]解释:总共有 2 门课程。要学习课程 1,你...原创 2020-12-11 17:14:48 · 87 阅读 · 0 评论 -
《拓扑排序》207. 课程表《leetcode》
207. 课程表难度中等656你这个学期必须选修numCourse门课程,记为0到numCourse-1。在选修某些课程之前需要一些先修课程。例如,想要学习课程 0 ,你需要先完成课程 1 ,我们用一个匹配来表示他们:[0,1]给定课程总量以及它们的先决条件,请你判断是否可能完成所有课程的学习?示例 1:输入: 2, [[1,0]] 输出: true解释:总共有 2 门课程。学习课程 1 之前,你需要完成课程 0。所以这是可能的。示例 2:输入:...原创 2020-12-10 20:04:31 · 145 阅读 · 0 评论 -
《leetcode》方法论
记录一些刷题的经验和思考。1.LeetCode 按照怎样的顺序来刷题比较好?有待更新。原创 2020-12-02 14:15:54 · 95 阅读 · 0 评论 -
《树》面试题 04.12. 求和路径《leetcode》
面试题 04.12. 求和路径难度中等41给定一棵二叉树,其中每个节点都含有一个整数数值(该值或正或负)。设计一个算法,打印节点数值总和等于某个给定值的所有路径的数量。注意,路径不一定非得从二叉树的根节点或叶节点开始或结束,但是其方向必须向下(只能从父节点指向子节点方向)。示例:给定如下二叉树,以及目标和sum = 22, 5 / \ 4 8 / / \ 11 .原创 2020-12-01 21:52:02 · 299 阅读 · 0 评论 -
《树》剑指 Offer 26. 树的子结构《leetcode》
剑指 Offer 26. 树的子结构难度中等151输入两棵二叉树A和B,判断B是不是A的子结构。(约定空树不是任意一个树的子结构)B是A的子结构, 即 A中有出现和B相同的结构和节点值。例如:给定的树 A: 3 / \ 4 5 / \1 2给定的树 B: 4 /1返回 true,因为 B 与 A 的一个子树拥有相同的结构和节点值。示例 1:输入:A = [1,2,3], B = [3,1]输出:false示例...原创 2020-11-30 21:50:14 · 90 阅读 · 0 评论 -
《树》112. 路径总和《leetcode》
112. 路径总和难度简单467给定一个二叉树和一个目标和,判断该树中是否存在根节点到叶子节点的路径,这条路径上所有节点值相加等于目标和。说明:叶子节点是指没有子节点的节点。示例:给定如下二叉树,以及目标和sum = 22, 5 / \ 4 8 / / \ 11 13 4 / \ \ 7 2 ...原创 2020-11-29 21:10:59 · 78 阅读 · 0 评论 -
《树》100. 相同的树《leetcode》
100. 相同的树难度简单519给定两个二叉树,编写一个函数来检验它们是否相同。如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。示例1:输入: 1 1 / \ / \ 2 3 2 3 [1,2,3], [1,2,3]输出: true示例 2:输入: 1 1 / \ .原创 2020-11-28 15:33:43 · 91 阅读 · 0 评论 -
《树的层序遍历》103. 二叉树的锯齿形层次遍历《leetcode》
103. 二叉树的锯齿形层次遍历难度中等300给定一个二叉树,返回其节点值的锯齿形层次遍历。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。例如:给定二叉树[3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7返回锯齿形层次遍历如下:[ [3], [20,9], [15,7]]通过次数80,723提交次数146,263思路解析:bfs+加反转Arra.原创 2020-11-27 22:19:27 · 108 阅读 · 0 评论 -
《桶排序》164. 最大间距《leetcode》
164. 最大间距难度困难293给定一个无序的数组,找出数组在排序之后,相邻元素之间最大的差值。如果数组元素个数小于 2,则返回 0。示例1:输入: [3,6,9,1]输出: 3解释: 排序后的数组是 [1,3,6,9], 其中相邻元素 (3,6) 和 (6,9) 之间都存在最大差值 3。示例2:输入: [10]输出: 0解释: 数组元素个数小于 2,因此返回 0。说明:你可以假设数组中所有元素都是非负整数,且数值在 32 位有符号整数范围内。 请尝..原创 2020-11-26 20:26:48 · 228 阅读 · 0 评论 -
《树》剑指 Offer 54. 二叉搜索树的第k大节点《leetcode》
剑指 Offer 54. 二叉搜索树的第k大节点难度简单90给定一棵二叉搜索树,请找出其中第k大的节点。示例 1:输入: root = [3,1,4,null,2], k = 1 3 / \ 1 4 \ 2输出: 4示例 2:输入: root = [5,3,6,2,4,null,null,1], k = 3 5 / \ 3 6 / \ 2 4 / 1输出: 4限制:1...原创 2020-11-25 18:21:06 · 69 阅读 · 0 评论 -
《树》222. 完全二叉树的节点个数《leetcode》
222. 完全二叉树的节点个数难度中等350给出一个完全二叉树,求出该树的节点个数。说明:完全二叉树的定义如下:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。若最底层为第 h 层,则该层包含 1~2h个节点。示例:输入: 1 / \ 2 3 / \ /4 5 6输出: 6通过次数57,299提交次数75,370思路分析:常规解法:时间复杂度:O(n) ..原创 2020-11-24 16:39:04 · 154 阅读 · 0 评论 -
《贪心算法》452. 用最少数量的箭引爆气球《leetcode》
452. 用最少数量的箭引爆气球难度中等289在二维空间中有许多球形的气球。对于每个气球,提供的输入是水平方向上,气球直径的开始和结束坐标。由于它是水平的,所以纵坐标并不重要,因此只要知道开始和结束的横坐标就足够了。开始坐标总是小于结束坐标。一支弓箭可以沿着 x 轴从不同点完全垂直地射出。在坐标 x 处射出一支箭,若有一个气球的直径的开始和结束坐标为xstart,xend,且满足 xstart≤ x ≤ xend,则该气球会被引爆。可以射出的弓箭的数量没有限制。 弓箭一旦被射出之后,可以...原创 2020-11-23 21:41:15 · 99 阅读 · 0 评论 -
《哈希表》242. 有效的字母异位词《leetcode》
242. 有效的字母异位词难度简单305给定两个字符串s和t,编写一个函数来判断t是否是s的字母异位词。示例1:输入: s = "anagram", t = "nagaram"输出: true示例 2:输入: s = "rat", t = "car"输出: false说明:你可以假设字符串只包含小写字母。进阶:如果输入字符串包含 unicode 字符怎么办?你能否调整你的解法来应对这种情况?通过次数175,049提交次数277,945思...原创 2020-11-22 21:58:31 · 203 阅读 · 0 评论 -
《树》102. 二叉树的层序遍历,107. 二叉树的层次遍历 II《leetcode》
102. 二叉树的层序遍历难度中等700给你一个二叉树,请你返回其按层序遍历得到的节点值。 (即逐层地,从左到右访问所有节点)。示例:二叉树:[3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7返回其层次遍历结果:[ [3], [9,20], [15,7]]通过次数218,828提交次数343,384思路解析:广度优先遍历-->层次遍历深度优先遍历->...原创 2020-11-22 12:54:25 · 138 阅读 · 0 评论 -
《贪心算法》122. 买卖股票的最佳时机 II《leetcode》
122. 买卖股票的最佳时机 II难度简单997给定一个数组,它的第i个元素是一支给定股票第i天的价格。设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。示例 1:输入: [7,1,5,3,6,4]输出: 7解释: 在第 2 天(股票价格 = 1)的时候买入,在第 3 天(股票价格 = 5)的时候卖出, 这笔交易所能获得利润 = 5-1 = 4 。 ...原创 2020-11-19 22:11:12 · 185 阅读 · 0 评论 -
《双指针》283. 移动零《leetcode》
283. 移动零难度简单834给定一个数组nums,编写一个函数将所有0移动到数组的末尾,同时保持非零元素的相对顺序。示例:输入: [0,1,0,3,12]输出: [1,3,12,0,0]说明:必须在原数组上操作,不能拷贝额外的数组。 尽量减少操作次数。思路解析:双指针。AC代码:class Solution { public void moveZeroes(int[] nums) { int i = 0;//统计前面0的个数 ...原创 2020-11-19 13:12:29 · 129 阅读 · 0 评论