力扣刷题笔记
逗号8080
足够专注,精益求精
展开
-
力扣每日一题 540. 有序数组中的单一元素
540. 有序数组中的单一元素给你一个仅由整数组成的有序数组,其中每个元素都会出现两次,唯有一个数只会出现一次。请你找出并返回只出现一次的那个数。你设计的解决方案必须满足 O(log n) 时间复杂度和 O(1) 空间复杂度。示例 1:输入: nums = [1,1,2,3,3,4,4,8,8]输出: 2示例 2:输入: nums = [3,3,7,7,10,11,11]输出: 10提示:1 <= nums.length <= 1050 <= nums[i]原创 2022-02-14 22:02:19 · 361 阅读 · 0 评论 -
最大公约数
什么是最大公约数最大公约数也称为最大公因子,最大公约数整数a能被整数b整除,则a可以称为b的倍数,b称为a的约数,最大公约数也就是两个数相同的最大约数。如 (16, 12) = 4 (7,5) = 1求最大公约数的方法1. 辗转相除法用大数除以小数,如果能够整除那么小数则是最大公约数,否则用两数相除的余数和小数继续相除。例16 / 12 = 1 余 412 / 4 = 3 余 0得出(16,12) = 4代码实现public int gcd(int a,int b){原创 2022-02-10 15:52:09 · 214 阅读 · 0 评论 -
力扣72.编辑距离
编辑距离题目72. 编辑距离难度困难2052收藏分享切换为英文接收动态反馈给你两个单词 word1 和 word2,请你计算出将 word1 转换成 word2 所使用的最少操作数 。你可以对一个单词进行如下三种操作:插入一个字符删除一个字符替换一个字符示例 1:输入:word1 = "horse", word2 = "ros"输出:3解释:horse -> rorse (将 'h' 替换为 'r')rorse -> rose (删除 'r')rose -&g原创 2022-01-19 22:12:04 · 843 阅读 · 0 评论 -
动态规划解决背包问题
什么是背包问题用《图解算法》中的一个例子来进行说明:假如你是一个小偷,背着一个能装4斤中的背包,你可以偷窃的物品有三种,分别为音响,笔记本电脑,吉他怎样才能让拿走商品价值最高呢?这种情况就是我们所说的背包问题,而背包问题又可以分为0-1背包和完全背包问题两种0 - 1背包问题0 - 1背包指每个物品只有一件且只有两种状态(取或不取)。使用动态规划解决0-1背包问题动态规划先解决子问题,在逐步解决大问题,而对于背包问题来说即先解决小容量背包问题再去解决大容量背包问题使用动态规划原创 2022-01-10 17:30:46 · 419 阅读 · 0 评论 -
贪心算法解决力扣406 452两题
一.力扣406假设有打乱顺序的一群人站成一个队列,数组 people 表示队列中一些人的属性(不一定按顺序)。每个 people[i] = [hi, ki] 表示第 i 个人的身高为 hi ,前面 正好 有 ki 个身高大于或等于 hi 的人。请你重新构造并返回输入数组 people 所表示的队列。返回的队列应该格式化为数组 queue ,其中 queue[j] = [hj, kj] 是队列中第 j 个人的属性(queue[0] 是排在队列前面的人)。示例 1:输入:people = [[7,0],原创 2021-12-31 19:25:06 · 494 阅读 · 0 评论 -
贪心算法学习
贪心算法1. 什么是贪心算法所谓贪心算法就是在解决问题时,不去考虑全局最优解,而是在每一步都取当前的局部最优解。即贪心算法总是在做目前看来最好的选择,所以贪心算法不能对所有问题都得到最优解。2.举几个贪心算法的例子1. 分配问题来自[力扣](力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台 (leetcode-cn.com))455. 分发饼干假设你是一位很棒的家长,想要给你的孩子们一些小饼干。但是,每个孩子最多只能给一块饼干。对每个孩子 i,都有一个胃口值 g[i],这是原创 2021-12-29 15:36:44 · 112 阅读 · 0 评论 -
回溯法学习
回溯法理论回溯法(探索与回溯法)是一种选优搜索法,又称为试探法,按选优条件向前搜索,以达到目标。但当探索到某一步时,发现原先选择并不优或达不到目标,就退回一步重新选择,这种走不通就退回再走的技术为回溯法,而满足回溯条件的某个状态的点称为“回溯点”。 —引用自百度百科回溯法与递归的关系十分密切,可以说只要有递归就会有回溯当我们使用回溯法解决问题时,采用的回溯函数就是递归函数效率回溯法的性能不是很高,他其实就是一种纯暴力搜索,我们搜索出来所有的可能,然后选出我们需要的结果。可以解决的问题组原创 2021-12-08 22:53:46 · 225 阅读 · 0 评论 -
力扣刷题笔记236
题号236. 二叉树的最近公共祖先简介:给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树 T 的两个节点 p、q,最近公共祖先表示为一个节点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”示例 1:输入:root = [3,5,1,6,2,0,8,null,null,7,4], p = 5, q = 1输出:3解释:节点 5 和节点 1 的最近公共祖先是节点 3 。示例 2:输入:root =原创 2021-11-25 23:27:52 · 104 阅读 · 0 评论 -
力扣刷题笔记98
题号:98.验证搜索二叉树简介:验证二叉搜索树难度中等1312给你一个二叉树的根节点 root ,判断其是否是一个有效的二叉搜索树。有效 二叉搜索树定义如下:节点的左子树只包含 小于 当前节点的数。节点的右子树只包含 大于 当前节点的数。所有左子树和右子树自身必须也是二叉搜索树。示例 1:输入:root = [2,1,3]输出:true示例 2:输入:root = [5,1,4,null,null,3,6]输出:false解释:根节点的值是 5 ,但是右子节点的值是 4 。原创 2021-11-23 18:17:29 · 91 阅读 · 0 评论 -
力扣刷题笔记654
题号654.最大二叉树简介:给定一个不含重复元素的整数数组 nums 。一个以此数组直接递归构建的 最大二叉树 定义如下:二叉树的根是数组 nums 中的最大元素。左子树是通过数组中 最大值左边部分 递归构造出的最大二叉树。右子树是通过数组中 最大值右边部分 递归构造出的最大二叉树。返回有给定数组 nums 构建的 最大二叉树 。示例 1:输入:nums = [3,2,1,6,0,5]输出:[6,3,5,null,2,0,null,null,1]解释:递归调用如下所示:[3,2,1,原创 2021-11-20 17:28:34 · 82 阅读 · 0 评论 -
力扣刷题笔记110
题号:110.平衡二叉树简介:给定一个二叉树,判断它是否是高度平衡的二叉树。本题中,一棵高度平衡二叉树定义为:一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1 。示例 1:输入:root = [3,9,20,null,null,15,7]输出:true示例 2:输入:root = [1,2,2,3,3,null,null,4,4]输出:false示例 3:输入:root = []输出:true来源:力扣(LeetCode)链接:https://leetc原创 2021-11-07 19:18:56 · 118 阅读 · 0 评论 -
二叉树的深度遍历(迭代法)
中序遍历我们可以借助一个栈来辅助实现首先一直向左走走到底if(cur != null){ stack.push(cur) cur = cur.left;}此时栈中因为是中序遍历,此时结点的值为null,所以去当前结点的父节点的值,即当前二叉树的最左结点的值。 cur = stack.pop(); res = cur.val; //去试探右孩子结点 cur = cur.right;此时是这种情况当前节点的值已经记录到了res数组中,我们需要去找他的右原创 2021-10-30 16:07:24 · 229 阅读 · 0 评论 -
力扣刷题笔记347
347.前 K 个高频元素简介:给你一个整数数组 nums和一个整数k,请你返回其中出现频率前 k 高的元素。你可以按 任意顺序 返回答案。示例 1:输入: nums = [1,1,1,2,2,3], k = 2输出: [1,2]示例 2:输入: nums = [1], k = 1输出: [1]题解:这道题的第一步是记录每个数字的出现次数,这一步十分简单我们可以采用一个Map来存储数字和他的出现次数然后就是比较出现次数的大小,确立前K个高频元素,这一步也是最重要的一步。我们原创 2021-10-22 21:53:22 · 234 阅读 · 0 评论 -
力扣刷题笔记1047
题号:1047. 删除字符串中的所有相邻重复项简介:给出由小写字母组成的字符串 S,重复项删除操作会选择两个相邻且相同的字母,并删除它们。在 S 上反复执行重复项删除操作,直到无法继续删除。在完成所有重复项删除操作后返回最终的字符串。答案保证唯一。示例:输入:“abbaca”输出:“ca”解释:例如,在 “abbaca” 中,我们可以删除 “bb” 由于两字母相邻且相同,这是此时唯一可以执行删除操作的重复项。之后我们得到字符串 “aaca”,其中又只有 “aa” 可以执行重复项删除操作,原创 2021-10-19 22:33:19 · 96 阅读 · 0 评论 -
力扣刷题笔记20( 字符串匹配常用辅助栈解法)
题号:20.有效的括号简介:给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串 s ,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。示例 1:输入:s = “()”输出:true示例 2:输入:s = “()[]{}”输出:true示例 3:输入:s = “(]”输出:false示例 4:输入:s = “([)]”输出:false示例 5:输入:s = “{[]}”输出:tr原创 2021-10-18 20:28:01 · 101 阅读 · 0 评论 -
力扣刷题笔记225
题号:225.用队列实现栈简介:请你仅使用两个队列实现一个后入先出(LIFO)的栈,并支持普通栈的全部四种操作(push、top、pop 和 empty)。实现 MyStack 类:void push(int x)将元素 x 压入栈顶。int pop()移除并返回栈顶元素。int top()返回栈顶元素。boolean empty()如果栈是空的,返回 true ;否则,返回 false 。注意:你只能使用队列的基本操作 —— 也就是 push to back、peek/pop from原创 2021-10-17 08:50:40 · 83 阅读 · 0 评论 -
力扣刷题笔记232
题号:232. 用栈实现队列简介:请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作(push、pop、peek、empty):实现 MyQueue 类:void push(int x) 将元素 x 推到队列的末尾int pop() 从队列的开头移除并返回元素int peek() 返回队列开头的元素boolean empty() 如果队列为空,返回 true ;否则,返回 false说明:你只能使用标准的栈操作 —— 也就是只有 push to top, peek/p原创 2021-10-16 17:36:39 · 107 阅读 · 0 评论 -
力扣刷题笔记151
题号:151.翻转字符串里的单词简介:给你一个字符串 s ,逐个翻转字符串中的所有 单词 。单词 是由非空格字符组成的字符串。s 中使用至少一个空格将字符串中的 单词 分隔开。请你返回一个翻转 s 中单词顺序并用单个空格相连的字符串。说明:输入字符串 s 可以在前面、后面或者单词间包含多余的空格。翻转后单词间应当仅用一个空格分隔。翻转后的字符串中不应包含额外的空格。示例 1:输入:s = “the sky is blue”输出:“blue is sky the”示例 2:输原创 2021-10-11 20:15:34 · 77 阅读 · 0 评论 -
力扣刷题笔记15
15.三数之和简介:给你一个包含 n个整数的数组nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有和为 0 且不重复的三元组。注意:答案中不可以包含重复的三元组。示例 1:输入:nums = [-1,0,1,2,-1,-4]输出:[[-1,-1,2],[-1,0,1]]示例 2:输入:nums = []输出:[]示例 3:输入:nums = [0]输出:[]题解:采用双指针的方法:首先对数组进行排序遍历原创 2021-10-09 10:42:36 · 67 阅读 · 0 评论 -
力扣刷题笔记142
题号:142. 环形链表 II简介:给定一个链表,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。为了表示给定链表中的环,我们使用整数 pos来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果pos是 -1,则在该链表中没有环。注意,pos仅仅是用于标识环的情况,并不会作为参数传递到函数中。说明:不允许修改给定的链表。进阶:你是否可以使用 O(1) 空间解决此题?示例 1:输入:head = [3,2,0,-4], pos = 1输出:返回索引为 1 的链表节点原创 2021-10-05 19:42:26 · 98 阅读 · 0 评论 -
力扣刷题笔记面试题02.07
题号:面试题02.07.链表相交简介:给你两个单链表的头节点 headA和headB,请你找出并返回两个单链表相交的起始节点。如果两个链表没有交点,返回null。图示两个链表在节点 c1 开始相交:题目数据 保证 整个链式结构中不存在环。注意,函数返回结果后,链表必须 保持其原始结构 。示例 1:输入:intersectVal = 8, listA = [4,1,8,4,5], listB = [5,0,1,8,4,5], skipA = 2, skipB = 3输出:Intersecte原创 2021-10-03 19:49:37 · 128 阅读 · 0 评论 -
数组解题技巧--双指针
双指针简介双指针是数组解题中的一种重要方式,常用于遍历解决问题,定义一快一慢两个指针可以在一个for循环里做到两个for循环做到的事例题力扣-移除数组题解class Solution { public int removeElement(int[] nums, int val) { int j = nums.length - 1; for (int i = 0; i <= j; i++) { if (nums[i] ==原创 2021-09-27 09:15:33 · 148 阅读 · 0 评论 -
数组解题技巧-二分查找
二分查找基本思想二分查找 :给定一个目标值 target ,在一个有序数组中找到他的下标位置,我们可以直接遍历数组,找到与目标值的位置,时间复杂度为O(n)换一种思路,我们首先找到数组的中间位置mid,判断mid与target的大小关系,因为数组是有序的,所以若,mid>target 则 target在mid的左半区,反之在mid的右半区,我们按此思路不断调整区间,最终找到target所在位置,这种方法的时间复杂度可以达到O(logn) 这就是二分查找。图解来道题力扣:二分查找原创 2021-09-26 23:34:20 · 82 阅读 · 0 评论 -
力扣刷题笔记292
题号:292. Nim 游戏简介:你和你的朋友,两个人一起玩 Nim 游戏:桌子上有一堆石头。你们轮流进行自己的回合,你作为先手。每一回合,轮到的人拿掉 1 - 3 块石头。拿掉最后一块石头的人就是获胜者。假设你们每一步都是最优解。请编写一个函数,来判断你是否可以在给定石头数量为 n 的情况下赢得游戏。如果可以赢,返回 true;否则,返回 false 。示例 1:输入:n = 4输出:false解释:如果堆中有 4 块石头,那么你永远不会赢得比赛;因为无论你拿走 1 块、2 块原创 2021-09-18 15:58:54 · 187 阅读 · 2 评论 -
力扣刷题笔记121
题号 : 121.买卖股票的最佳时机简介:给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回 0 。示例 1:输入:[7,1,5,3,6,4]输出:5解释:在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润原创 2021-09-17 19:14:50 · 84 阅读 · 0 评论 -
力扣刷题笔记2000
题号:2000. 反转单词前缀简介:给你一个下标从 0 开始的字符串 word 和一个字符 ch 。找出 ch 第一次出现的下标 i ,反转 word 中从下标 0 开始、直到下标 i 结束(含下标 i )的那段字符。如果 word 中不存在字符 ch ,则无需进行任何操作。例如,如果 word = “abcdefd” 且 ch = “d” ,那么你应该 反转 从下标 0 开始、直到下标 3 结束(含下标 3 )。结果字符串将会是 “dcbaefd” 。返回 结果字符串 。示例 1:输入:wo原创 2021-09-15 15:15:57 · 217 阅读 · 0 评论 -
力扣刷题笔记 剑指Offer 05
题号:剑指Offer05 :替换空格简介:请实现一个函数,把字符串 s 中的每个空格替换成"%20"。示例 1:输入:s = “We are happy.”输出:“We%20are%20happy.”题解:看到这道题的时候我脑子里第一个想法就是String中的replaceAll方法然后直接执行发现有点慢才击败了14.01%只能老老实实的自己写,直接遍历遇到空格就加’%20‘然后速度就快了起来代码:class Solution { public String rep原创 2021-09-09 19:55:07 · 192 阅读 · 0 评论 -
力扣刷题笔记264
题号:264.丑数2简介:给你一个整数 n ,请你找出并返回第 n 个 丑数 。丑数 就是只包含质因数 2、3 和/或 5 的正整数。示例1:输入:n = 10输出:12解释:[1, 2, 3, 4, 5, 6, 8, 9, 10, 12] 是由前 10 个丑数组成的序列。示例2:输入:n = 1输出:1解释:1 通常被视为丑数。题解本题的核心思想是一个丑数s ,s2 s3 s*5 都会是一个丑数,所以我们从第一个丑数1开始,2,3,5都会是丑数。第n+1个丑数一定是前n个原创 2021-09-06 21:17:38 · 97 阅读 · 0 评论 -
力扣刷题笔记704
题号 :704. 二分查找简介 :给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。示例 1:输入: nums = [-1,0,3,5,9,12], target = 9输出: 4解释: 9 出现在 nums 中并且下标为 4示例 2:输入: nums = [-1,0,3,5,9,12], target = 2输出: -1解释: 2 不存在 nums 中因此返回原创 2021-09-06 20:21:17 · 104 阅读 · 0 评论 -
力扣刷题笔记剑指 Offer 10- I. 斐波那契数列
题号:剑指 Offer 10- I. 斐波那契数列简介:写一个函数,输入 n ,求斐波那契(Fibonacci)数列的第 n 项(即 F(N))。斐波那契数列的定义如下:F(0) = 0, F(1) = 1F(N) = F(N - 1) + F(N - 2), 其中 N > 1.斐波那契数列由 0 和 1 开始,之后的斐波那契数就是由之前的两数相加而得出。答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返回 1。示例 1:输入:n原创 2021-09-04 14:27:56 · 130 阅读 · 0 评论 -
力扣刷题笔记258
题号:258. 各位相加简介:给定一个非负整数 num,反复将各个位上的数字相加,直到结果为一位数。示例:输入: 38输出: 2解释: 各位相加的过程为:3 + 8 = 11, 1 + 1 = 2。 由于 2 是一位数,所以返回 2。题解:规律: 能被9整除的数他的各位相加一定为9不能被9整除的数他的模就是最后相加到只有1位的值代码:class Solution { public int addDigits(int num) { if(num == 0){原创 2021-09-03 10:24:56 · 81 阅读 · 0 评论 -
力扣刷题笔记 剑指Offer22
题号: 剑指 Offer 22. 链表中倒数第k个节点简介:输入一个链表,输出该链表中倒数第k个节点。为了符合大多数人的习惯,本题从1开始计数,即链表的尾节点是倒数第1个节点。例如,一个链表有== 6== 个节点,从头节点开始,它们的值依次是 == 1、2、3、4、5、6。这个链表的倒数第 3 == 个节点是值为== 4 == 的节点。...原创 2021-09-02 22:32:00 · 100 阅读 · 0 评论 -
力扣刷题笔记1385
题号:1385. 两个数组间的距离值简介:给你两个整数数组 arr1 , arr2 和一个整数 d ,请你返回两个数组之间的 距离值 。「距离值」 定义为符合此距离要求的元素数目:对于元素 arr1[i] ,不存在任何元素 arr2[j] 满足 |arr1[i]-arr2[j]| <= d 。示例 1:输入:arr1 = [4,5,8], arr2 = [10,9,1,8], d = 2输出:2解释:对于 arr1[0]=4 我们有:|4-10|=6 > d=2 |4-9|=原创 2021-09-01 16:09:58 · 82 阅读 · 0 评论 -
力扣刷题笔记844
题号:844. 比较含退格的字符串简介:给定 S 和 T 两个字符串,当它们分别被输入到空白的文本编辑器后,判断二者是否相等,并返回结果。 # 代表退格字符。注意:如果对空文本输入退格字符,文本继续为空。示例 1:输入:S = "ab#c", T = "ad#c"输出:true解释:S 和 T 都会变成 “ac”。示例 2:输入:S = "ab##", T = "c#d#"输出:true解释:S 和 T 都会变成 “”。示例 3:输入:S = "a##c", T = "#a#c原创 2021-08-31 20:22:30 · 107 阅读 · 0 评论 -
力扣刷题笔记504
题号: 504.七进制数简介:给定一个整数 num,将其转化为 7 进制,并以字符串形式输出。示例 1:输入: num = 100输出: "202"示例 2:输入: num = -7输出: "-10"题解:进制转化问题 将一个十进制进制数转化为七进制数思想 正常的十进制数转化为n进制数只需要用原数除以n 取余数反转即可如100 / 7 = 14 余 214 / 7 = 2 余 02 / 7 =0 余 2反转得202负数去绝对值求绝对值的进制数最后再加上符号即可可采用原创 2021-08-30 20:11:52 · 158 阅读 · 0 评论 -
力扣刷题笔记1189
题号:1189. “气球” 的最大数量简介:给你一个字符串 text,你需要使用 text 中的字母来拼凑尽可能多的单词 “balloon”(气球)。字符串 text 中的每个字母最多只能被使用一次。请你返回最多可以拼凑出多少个单词 “balloon”。题解本题思想即统计text中的 ‘b’,‘a’,‘l’,‘o’,'n’字符的个数即可l 和 o的个数需要除以二,最后五个字符个数中最小的即为能拼出"balloon"单词的个数代码class Solution { public int原创 2021-08-27 11:34:01 · 105 阅读 · 0 评论 -
力扣刷题笔记1005
题号: 1005. K 次取反后最大化的数组和简介:给定一个整数数组 A,我们只能用以下方法修改该数组:我们选择某个索引 i 并将 A[i] 替换为 -A[i],然后总共重复这个过程 K 次。(我们可以多次选择同一个索引 i。)以这种方式修改数组后,返回数组可能的最大和。示例 1:输入:A = [4,2,3], K = 1输出:5解释:选择索引 (1,) ,然后 A 变为 [4,-2,3]。示例 2:输入:A = [3,-1,0,2], K = 3输出:6解释:选择索引 (1, 2, 2原创 2021-08-25 11:46:02 · 150 阅读 · 0 评论 -
剑指offer 29
题号:29.顺时针打印矩阵简介:输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。示例 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]题解:此题我们可以模拟顺时针遍历的过程首先设置四个边框四...原创 2021-08-24 16:26:11 · 66 阅读 · 0 评论 -
力扣刷题笔记541
题目 541.反转字符串二简介给定一个字符串 s 和一个整数 k,从字符串开头算起,每 2k 个字符反转前 k 个字符。如果剩余字符少于 k 个,则将剩余字符全部反转。如果剩余字符小于 2k 但大于或等于 k 个,则反转前 k 个字符,其余字符保持原样。示例 1:输入:s = "abcdefg", k = 2输出:"bacdfeg"示例 2:输入:s = "abcd", k = 2输出:"bacd"题解:首先题目要求每2k个字符反转前 k个字符 剩余字符少于k.原创 2021-08-23 17:58:49 · 75 阅读 · 0 评论 -
力扣刷题笔记125
class Solution { public boolean isPalindrome(String s) { String str= s.replaceAll("[^0-9a-zA-Z]","").toLowerCase(); int left = 0; int right = str.length()-1; char[] c = str.toCharArray(); while (left<right) {.原创 2021-08-21 12:35:13 · 67 阅读 · 0 评论