![](https://img-blog.csdnimg.cn/2020050420454982.jpg?x-oss-process=image/resize,m_fixed,h_224,w_224)
LeetCode-解题记录
个人对力扣上的题目一些解题方法和解题代码
重剑DS
学的越多,越觉无知
展开
-
189. 轮转数组 --- 多种方式解题
还要想到 nums = {1,2,3,4}, k = 2的情况。原创 2024-07-12 15:23:42 · 119 阅读 · 0 评论 -
剑指 Offer 20. 表示数值的字符串 --- 有限状态自动机(DFA)解题
请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。数值(按顺序)可以分成以下几个部分:若干空格一个 小数 或者 整数(可选)一个 ‘e’ 或 ‘E’ ,后面跟着一个 整数若干空格小数(按顺序)可以分成以下几个部分:(可选)一个符号字符(’+’ 或 ‘-’)下述格式之一:至少一位数字,后面跟着一个点 ‘.’至少一位数字,后面跟着一个点 ‘.’ ,后面再跟着至少一位数字一个点 ‘.’ ,后面跟着至少一位数字整数(按顺序)可以分成以下几个部分:(可选)一个符号字符(’+’ 或原创 2021-09-29 13:52:27 · 154 阅读 · 0 评论 -
122. 买卖股票的最佳时机 II(C++)--- 动态规划 / 贪心解题
给定一个数组,它的第i 个元素是一支给定股票第 i 天的价格。设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。示例 1:输入: [7,1,5,3,6,4]输出: 7解释: 在第 2 天(股票价格 = 1)的时候买入,在第 3 天(股票价格 = 5)的时候卖出, 这笔交易所能获得利润 = 5-1 = 4 。 随后,在第 4 天(股票价格 = 3)的时候买入,在第 ...原创 2020-11-08 13:44:46 · 246 阅读 · 0 评论 -
42. 接雨水(C++) --- 单调递减栈解题
给定n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。示例 1:输入:height = [0,1,0,2,1,0,1,3,2,1,2,1]输出:6解释:上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图,在这种情况下,可以接 6 个单位的雨水(蓝色部分表示雨水)。示例 2:输入:height = [4,2,0,3,2,5]输出:9提示:n == height.length0 <= n &l...原创 2020-11-04 16:08:05 · 377 阅读 · 0 评论 -
845. 数组中的最长山脉(C++)
我们把数组 A 中符合下列属性的任意连续子数组 B 称为 “山脉”:B.length >= 3存在 0 < i< B.length - 1 使得 B[0] < B[1] < ... B[i-1] < B[i] > B[i+1] > ... > B[B.length - 1](注意:B 可以是 A 的任意子数组,包括整个数组 A。)给出一个整数数组 A,返回最长 “山脉”的长度。如果不含有 “山脉”则返回 0。示例 1:...原创 2020-10-25 16:56:55 · 518 阅读 · 0 评论 -
1024. 视频拼接(C++)---动态规划解题
题目详情你将会获得一系列视频片段,这些片段来自于一项持续时长为T秒的体育赛事。这些片段可能有所重叠,也可能长度不一。视频片段clips[i]都用区间进行表示:开始于clips[i][0]并于clips[i][1]结束。我们甚至可以对这些片段自由地再剪辑,例如片段[0, 7]可以剪切成[0, 1] +[1, 3] + [3, 7]三部分。我们需要将这些片段进行再剪辑,并将剪辑后的内容拼接成覆盖整个运动过程的片段([0, T])。返回所需片段的最小数目,如果无法完成该任务,...原创 2020-10-24 09:48:26 · 7751 阅读 · 0 评论 -
234. 回文链表(C++)---栈解题
题目详情请判断一个链表是否为回文链表。示例 1:输入: 1->2输出: false示例 2:输入: 1->2->2->1输出: true进阶:你能否用O(n) 时间复杂度和 O(1) 空间复杂度解决此题?——题目难度:简单栈解题class Solution {public: bool isPalindrome(ListNode* head) { stack<int> st; ListNode...原创 2020-10-23 09:23:23 · 139 阅读 · 0 评论 -
876. 链表的中间结点(C++)--- 快慢指针解题
给定一个带有头结点head的非空单链表,返回链表的中间结点。如果有两个中间结点,则返回第二个中间结点。示例 1:输入:[1,2,3,4,5]输出:此列表中的结点 3 (序列化形式:[3,4,5])返回的结点值为 3 。 (测评系统对该结点序列化表述是 [3,4,5])。注意,我们返回了一个 ListNode 类型的对象 ans,这样:ans.val = 3, ans.next.val = 4, ans.next.next.val = 5, 以及 ans.next.next.ne...原创 2020-10-18 15:05:28 · 217 阅读 · 0 评论 -
19. 删除链表的倒数第N个节点(C++)--- 双指针解题
给定一个链表,删除链表的倒数第n个节点,并且返回链表的头结点。示例:给定一个链表: 1->2->3->4->5, 和 n = 2.当删除了倒数第二个节点后,链表变为 1->2->3->5.说明:给定的 n保证是有效的。进阶:你能尝试使用一趟扫描实现吗?来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/remove-nth-node-from-end-of-list——题...原创 2020-10-18 11:02:25 · 158 阅读 · 0 评论 -
N皇后解题模板---回溯算法解题
题目详情n皇后问题研究的是如何将 n个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击。上图为 8 皇后问题的一种解法。给定一个整数 n,返回 n 皇后不同的解决方案的数量。示例:输入: 4输出: 2解释: 4 皇后问题存在如下两个不同的解法。[[".Q..", // 解法 1"...Q","Q...","..Q."],["..Q.", // 解法 2"Q...","...Q",".Q.."]]提示:皇后,...原创 2020-10-17 11:07:36 · 246 阅读 · 0 评论 -
206. 反转链表(C++)
反转一个单链表。示例:输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULL进阶:你可以迭代或递归地反转链表。你能否用两种方法解决这道题?来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/reverse-linked-list——题目难度:简单使用头插法,迭代解题/** * Definition for sin..原创 2020-10-15 11:03:11 · 319 阅读 · 0 评论 -
203. 移除链表元素(C++)
删除链表中等于给定值val的所有节点。示例:输入: 1->2->6->3->4->5->6, val = 6输出: 1->2->3->4->5——题目难度:简单解题代码class Solution {public: ListNode* removeElements(ListNode* head, int val) { //创建头结点 ListNode* pre = new...原创 2020-10-15 10:38:07 · 266 阅读 · 0 评论 -
494. 目标和(C++)---深度优先搜索 和 01背包动态规划 解题
给定一个非负整数数组,a1, a2, ..., an, 和一个目标数,S。现在你有两个符号+和-。对于数组中的任意一个整数,你都可以从+或-中选择一个符号添加在前面。返回可以使最终数组和为目标数 S 的所有添加符号的方法数。示例:输入:nums: [1, 1, 1, 1, 1], S: 3输出:5解释:-1+1+1+1+1 = 3+1-1+1+1+1 = 3+1+1-1+1+1 = 3+1+1+1-1+1 = 3+1+1+1+1-1 = 3一共有5种方法让最...原创 2020-10-11 20:05:22 · 185 阅读 · 0 评论 -
47. 全排列 II(C++)--- 回溯法解题
题目详情给定一个可包含重复数字的序列,返回所有不重复的全排列。示例:输入: [1,1,2]输出:[ [1,1,2], [1,2,1], [2,1,1]]来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/permutations-ii——题目难度:中等解题代码class Solution {private: map<int, int> mp; vector<vec...原创 2020-10-10 21:43:33 · 170 阅读 · 0 评论 -
142. 环形链表 II(C++)---快慢指针,双指针解题
题目详情给定一个链表,返回链表开始入环的第一个节点。如果链表无环,则返回null。为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。说明:不允许修改给定的链表。示例 1:输入:head = [3,2,0,-4], pos = 1输出:tail connects to node index 1解释:链表中有一个环,其尾部连接到第二个节点。示例2:输入:head =...原创 2020-10-10 14:25:38 · 124 阅读 · 0 评论 -
160. 相交链表(C++)---暴力法、哈希表 及 双指针解题
编写一个程序,找到两个单链表相交的起始节点。如下面的两个链表:在节点 c1 开始相交。示例 1:输入:intersectVal = 8, listA = [4,1,8,4,5], listB = [5,0,1,8,4,5], skipA = 2, skipB = 3输出:Reference of the node with value = 8输入解释:相交节点的值为 8 (注意,如果两个链表相交则不能为 0)。从各自的表头开始算起,链表 A 为 [4,1,8,4,5],链表 B 为..原创 2020-10-08 22:51:59 · 192 阅读 · 0 评论 -
5534. 可见点的最大数目(C++)---极角排序 + 滑动窗口 解题
题目详情给你一个点数组points和一个表示角度的整数angle,你的位置是location,其中location = [posx, posy]且points[i] = [xi, yi]都表示 X-Y 平面上的整数坐标。最开始,你面向东方进行观测。你不能进行移动改变位置,但可以通过自转调整观测角度。换句话说,posx和posy不能改变。你的视野范围的角度用angle表示, 这决定了你观测任意方向时可以多宽。设d为逆时针旋转的度数,那么你的视野就是角度范围[...原创 2020-10-04 15:51:08 · 379 阅读 · 0 评论 -
576. 出界的路径数(C++)---动态规划解题
题目详情给定一个 m × n 的网格和一个球。球的起始坐标为(i,j),你可以将球移到相邻的单元格内,或者往上、下、左、右四个方向上移动使球穿过网格边界。但是,你最多可以移动N次。找出可以将球移出边界的路径数量。答案可能非常大,返回 结果 mod 109+ 7 的值。示例 1:输入: m = 2, n = 2, N = 2, i = 0, j = 0输出: 6解释:示例 2:输入: m = 1, n = 3, N = 3, i = 0, j = 1输出: 12解释...原创 2020-10-04 10:25:50 · 245 阅读 · 0 评论 -
690. 员工的重要性(C++)---哈希表 + dfs 解题
题目详情给定一个保存员工信息的数据结构,它包含了员工唯一的id,重要度和 直系下属的id。比如,员工1是员工2的领导,员工2是员工3的领导。他们相应的重要度为15, 10, 5。那么员工1的数据结构是[1, 15, [2]],员工2的数据结构是[2, 10, [3]],员工3的数据结构是[3, 5, []]。注意虽然员工3也是员工1的一个下属,但是由于并不是直系下属,因此没有体现在员工1的数据结构中。现在输入一个公司的所有员工信息,以及单个员工id,返回这个员工和他所有下属的重要度之和。示.原创 2020-10-03 22:10:29 · 145 阅读 · 0 评论 -
1. 两数之和(C++)---哈希表解题
给定一个整数数组 nums和一个目标值 target,请你在该数组中找出和为目标值的那两个整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。示例:给定 nums = [2, 7, 11, 15], target = 9因为 nums[0] + nums[1] = 2 + 7 = 9所以返回 [0, 1]来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/two-sum...原创 2020-10-03 14:07:25 · 621 阅读 · 0 评论 -
771. 宝石与石头(C++)---哈希表解题
给定字符串J代表石头中宝石的类型,和字符串S代表你拥有的石头。S中每个字符代表了一种你拥有的石头的类型,你想知道你拥有的石头中有多少是宝石。J中的字母不重复,J和S中的所有字符都是字母。字母区分大小写,因此"a"和"A"是不同类型的石头。示例 1:输入: J = "aA", S = "aAAbbbb"输出: 3示例 2:输入: J = "z", S = "ZZ"输出: 0注意:S和J最多含有50个字母。 J中的字符不重复。来源:力扣(LeetCode)链接...原创 2020-10-02 08:21:34 · 183 阅读 · 0 评论 -
LCP 19. 秋叶收藏集(C++)---动态规划解题
题目详情小扣出去秋游,途中收集了一些红叶和黄叶,他利用这些叶子初步整理了一份秋叶收藏集 leaves, 字符串 leaves 仅包含小写字符 r 和 y, 其中字符 r 表示一片红叶,字符 y 表示一片黄叶。出于美观整齐的考虑,小扣想要将收藏集中树叶的排列调整成「红、黄、红」三部分。每部分树叶数量可以不相等,但均需大于等于 1。每次调整操作,小扣可以将一片红叶替换成黄叶或者将一片黄叶替换成红叶。请问小扣最少需要多少次调整操作才能将秋叶收藏集调整完毕。示例 1:输入:leaves = "rrry原创 2020-10-01 12:08:37 · 187 阅读 · 0 评论 -
117. 填充每个节点的下一个右侧节点指针 II (C++)
题目详情给定一个二叉树struct Node { int val; Node *left; Node *right; Node *next;}填充它的每个 next 指针,让这个指针指向其下一个右侧节点。如果找不到下一个右侧节点,则将 next 指针设置为 NULL。初始状态下,所有next 指针都被设置为 NULL。进阶:你只能使用常量级额外空间。 使用递归解题也符合要求,本题中递归程序占用的栈空间不算做额外的空间复杂度。 示例:输入:root ...原创 2020-09-28 12:23:07 · 181 阅读 · 0 评论 -
496. 下一个更大元素 I (C++)---单调栈解题
题目详情给定两个 没有重复元素 的数组nums1 和nums2,其中nums1是nums2的子集。找到nums1中每个元素在nums2中的下一个比其大的值。nums1中数字x的下一个更大元素是指x在nums2中对应位置的右边的第一个比x大的元素。如果不存在,对应位置输出 -1 。示例 1:输入: nums1 = [4,1,2], nums2 = [1,3,4,2].输出: [-1,3,-1]解释: 对于num1中的数字4,你无法在第二个数组...原创 2020-09-27 21:25:21 · 88 阅读 · 0 评论 -
235. 二叉搜索树的最近公共祖先(C++)---LCA解法
题目详情给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”例如,给定如下二叉搜索树:root =[6,2,8,0,4,7,9,null,null,3,5]示例 1:输入: root = [6,2,8,0,4,7,9,null,null,3,5], p = 2, q = 8输出: 6...原创 2020-09-27 10:16:14 · 353 阅读 · 0 评论 -
141. 环形链表(C++)---快慢指针解题
题目详情给定一个链表,判断链表中是否有环。如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。注意:pos 不作为参数进行传递,仅仅是为了标识链表的实际情况。如果链表中存在环,则返回 true 。 否则,返回 false 。进阶:你能用 O(1)(即,常量)内存解决此问题吗?示例 1:输入:h..原创 2020-09-26 11:01:22 · 148 阅读 · 0 评论 -
113. 路径总和 II(C++)---DFS解题
给定一个二叉树和一个目标和,找到所有从根节点到叶子节点路径总和等于给定目标和的路径。说明:叶子节点是指没有子节点的节点。示例:给定如下二叉树,以及目标和sum = 22, 5 / \ 4 8 / / \ 11 13 4 / \ / \ 7 2 5 1返回:[ [5,4,11,2], ...原创 2020-09-26 10:14:43 · 103 阅读 · 0 评论 -
501. 二叉搜索树中的众数(C++)
题目详情给定一个有相同值的二叉搜索树(BST),找出 BST 中的所有众数(出现频率最高的元素)。假定 BST 有如下定义:结点左子树中所含结点的值小于等于当前结点的值 结点右子树中所含结点的值大于等于当前结点的值 左子树和右子树都是二叉搜索树例如:给定 BST [1,null,2,2], 1 \ 2 / 2返回[2].提示:如果众数超过1个,不需考虑输出顺序进阶:你可以不使用额外的空间吗?(假设由递归产生的隐式调用栈的开销不被计算在内)...原创 2020-09-24 12:39:36 · 219 阅读 · 0 评论 -
637. 二叉树的层平均值(C++)---BFS解题
给定一个非空二叉树, 返回一个由每层节点平均值组成的数组。示例 1:输入: 3 / \ 9 20 / \ 15 7输出:[3, 14.5, 11]解释:第 0 层的平均值是 3 , 第1层是 14.5 , 第2层是 11 。因此返回 [3, 14.5, 11] 。提示:节点值的范围在32位有符号整数范围内。——题目难度:简单-解题代码class Solution {public: vector<...原创 2020-09-12 12:59:17 · 121 阅读 · 0 评论 -
841. 钥匙和房间(C++)---深度优先搜索解题
有 N 个房间,开始时你位于 0 号房间。每个房间有不同的号码:0,1,2,...,N-1,并且房间里可能有一些钥匙能使你进入下一个房间。在形式上,对于每个房间 i 都有一个钥匙列表 rooms[i],每个钥匙 rooms[i][j] 由 [0,1,...,N-1] 中的一个整数表示,其中 N = rooms.length。 钥匙 rooms[i][j] = v 可以打开编号为 v 的房间。最初,除 0 号房间外的其余所有房间都被锁住。你可以自由地在房间之间来回走动。如果能进入每个房间返回原创 2020-08-31 19:30:14 · 282 阅读 · 0 评论 -
557. 反转字符串中的单词 III(C++)---字符串
给定一个字符串,你需要反转字符串中每个单词的字符顺序,同时仍保留空格和单词的初始顺序。示例:输入:"Let's take LeetCode contest"输出:"s'teL ekat edoCteeL tsetnoc"提示:在字符串中,每个单词由单个空格分隔,并且字符串中不会有任何额外的空格。——题目难度:简单-下面代码(有注释)class Solution {public: string reverseWords(string s) { if (s..原创 2020-08-30 18:37:08 · 219 阅读 · 0 评论 -
657. 机器人能否返回原点(C++)
在二维平面上,有一个机器人从原点 (0, 0) 开始。给出它的移动顺序,判断这个机器人在完成移动后是否在 (0, 0) 处结束。移动顺序由字符串表示。字符 move[i] 表示其第 i 次移动。机器人的有效动作有 R(右),L(左),U(上)和 D(下)。如果机器人在完成所有动作后返回原点,则返回 true。否则,返回 false。注意:机器人“面朝”的方向无关紧要。 “R” 将始终使机器人向右移动一次,“L” 将始终向左移动等。此外,假设每次移动机器人的移动幅度相同。示例 1:输入: ".原创 2020-08-28 08:51:22 · 197 阅读 · 0 评论 -
332. 重新安排行程(C++)---找欧拉通路 / 深度优先搜索解题
题目详情给定一个机票的字符串二维数组 [from, to],子数组中的两个成员分别表示飞机出发和降落的机场地点,对该行程进行重新规划排序。所有这些机票都属于一个从 JFK(肯尼迪国际机场)出发的先生,所以该行程必须从 JFK 开始。说明:如果存在多种有效的行程,你可以按字符自然排序返回最小的行程组合。例如,行程 ["JFK", "LGA"] 与 ["JFK", "LGB"] 相比就更小,排序更靠前 所有的机场都用三个大写字母表示(机场代码)。 假定所有机票至少存在一种合理的行程。示例 1:原创 2020-08-27 11:17:57 · 330 阅读 · 0 评论 -
17. 电话号码的字母组合
题目详情给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。示例:输入:"23"输出:["ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf"].说明:尽管上面的答案是按字典序排列的,但是你可以任意选择答案输出的顺序。——题目难度:中等-直接上代码class Solution {private: unordered_map<..原创 2020-08-26 08:59:59 · 116 阅读 · 0 评论 -
491. 递增子序列(C++)---dfs + 去重
题目详情给定一个整型数组, 你的任务是找到所有该数组的递增子序列,递增子序列的长度至少是2。示例:输入: [4, 6, 7, 7]输出: [[4, 6], [4, 7], [4, 6, 7], [4, 6, 7, 7], [6, 7], [6, 7, 7], [7,7], [4,7,7]]说明:给定数组的长度不会超过15。 数组中的整数范围是 [-100,100]。 给定数组中可能包含重复数字,相等的数字应该被视为递增的一种情况。——题目难度:中等-解题代码c...原创 2020-08-25 15:11:08 · 193 阅读 · 0 评论 -
459. 重复的子字符串(C++)---字符串匹配
给定一个非空的字符串,判断它是否可以由它的一个子串重复多次构成。给定的字符串只含有小写英文字母,并且长度不超过10000。示例 1:输入: "abab"输出: True解释: 可由子字符串 "ab" 重复两次构成。示例 2:输入: "aba"输出: False示例 3:输入: "abcabcabcabc"输出: True解释: 可由子字符串 "abc" 重复四次构成。 (或者子字符串 "abcabc" 重复两次构成。)——题目难度:简单分析...原创 2020-08-24 09:14:07 · 1392 阅读 · 0 评论 -
201. 数字范围按位与(C++)---与运算
题目详情给定范围 [m, n],其中 0 <= m <= n <= 2147483647,返回此范围内所有数字的按位与(包含 m, n 两端点)。示例 1:输入: [5,7]输出: 4示例 2:输入: [0,1]输出: 0——题目难度:中等分析直接考虑 m 和 n,如果m一开始就等于n,那直接返回n即可;如果n = m + 1,假设m的末位是0,那么m的末位就是1,说明两者末尾不相等,通过m和n不断右移,并记录右移的次数(保存在变量count里),...原创 2020-08-23 09:33:07 · 347 阅读 · 0 评论 -
679. 24 点游戏(C++)---递归回溯法解题
题目详情你有 4 张写有 1 到 9 数字的牌。你需要判断是否能通过 *,/,+,-,(,) 的运算得到 24。示例 1:输入: [4, 1, 8, 7]输出: True解释: (8-4) * (7-1) = 24示例 2:输入: [1, 2, 1, 2]输出: False注意:除法运算符 / 表示实数除法,而不是整数除法。例如 4 / (1 - 2/3) = 12 。 每个运算符对两个数进行运算。特别是我们不能用 - 作为一元运算符。例如,[1, 1, 1, 1] 作为输入时,表达式原创 2020-08-22 08:47:39 · 690 阅读 · 0 评论 -
111. 二叉树的最小深度(C++)--- 递归 / BFS解题
给定一个二叉树,找出其最小深度。最小深度是从根节点到最近叶子节点的最短路径上的节点数量。说明:叶子节点是指没有子节点的节点。示例:给定二叉树[3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7返回它的最小深度 2.——题目难度:简单dfs解题代码/** * Definition for a binary tree node. * struct TreeNode { * ...原创 2020-08-21 08:38:35 · 244 阅读 · 0 评论 -
529. 扫雷游戏(C++)---DFS解题
题目详情让我们一起来玩扫雷游戏!给定一个代表游戏板的二维字符矩阵。 'M' 代表一个未挖出的地雷,'E' 代表一个未挖出的空方块,'B' 代表没有相邻(上,下,左,右,和所有4个对角线)地雷的已挖出的空白方块,数字('1' 到 '8')表示有多少地雷与这块已挖出的方块相邻,'X' 则表示一个已挖出的地雷。现在给出在所有未挖出的方块中('M'或者'E')的下一个点击位置(行和列索引),根据以下规则,返回相应位置被点击后对应的面板:如果一个地雷('M')被挖出,游戏就结束了- 把它改为 'X'。原创 2020-08-20 09:24:32 · 309 阅读 · 0 评论