各种算法题
我的题啊我不会的题我很烦恼啊我为什么不会
超好的小白
这个作者很懒,什么都没留下…
展开
-
1014 福尔摩斯的约会
大侦探很快就明白了,字条上奇怪的乱码实际上就是约会的时间星期四 14:04,因为前面两字符串中第 1 对相同的大写英文字母(大小写有区分)是第 4 个字母 D,代表星期四;在一行中输出约会的时间,格式为 DAY HH:MM,其中 DAY 是某星期的 3 字符缩写,即 MON 表示星期一,TUE 表示星期二,WED 表示星期三,THU 表示星期四,FRI 表示星期五,SAT 表示星期六,SUN 表示星期日。输入在 4 行中分别给出 4 个非空、不包含空格、且长度不超过 60 的字符串。原创 2023-03-05 17:13:18 · 68 阅读 · 0 评论 -
LeetCode744. 寻找比目标字母大的最小字母
寻找比目标字母大的最小字母给你一个排序后的字符列表 letters ,列表中只包含小写英文字母。另给出一个目标字母 target,请你寻找在这一有序列表里比目标字母大的最小字母。在比较时,字母是依序循环出现的。举个例子:如果目标字母 target = ‘z’ 并且字符列表为 letters = [‘a’, ‘b’],则答案返回 ‘a’示例 1:输入: letters = [“c”, “f”, “j”],target = “a”输出: “c”示例 2:输入: letters = [“c”,.原创 2022-07-08 14:55:01 · 89 阅读 · 0 评论 -
LeetCode 55. 跳跃游戏
跳跃游戏给定一个非负整数数组 nums ,你最初位于数组的 第一个下标 。数组中的每个元素代表你在该位置可以跳跃的最大长度。判断你是否能够到达最后一个下标。示例 1:输入:nums = [2,3,1,1,4]输出:true解释:可以先跳 1 步,从下标 0 到达下标 1, 然后再从下标 1 跳 3 步到达最后一个下标。示例 2:输入:nums = [3,2,1,0,4]输出:false解释:无论怎样,总会到达下标为 3 的位置。但该下标的最大跳跃长度是 0 , 所以永远不可能到达最.原创 2022-04-01 11:31:57 · 148 阅读 · 0 评论 -
集赞 尺取简版
尺取,对于N个数组元素,在T个时间间隔内,集齐K个赞。arr[ i]表示第i个时间时获得一个赞。package PTA;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.util.*;public class Main { public static void main(String[] args) throws IOExcept原创 2022-03-15 20:00:54 · 213 阅读 · 0 评论 -
LeetCode406. 根据身高重建队列[Arrays.sort()的使用
根据身高重建队列假设有打乱顺序的一群人站成一个队列,数组 people 表示队列中一些人的属性(不一定按顺序)。每个 people[i] = [hi, ki] 表示第 i 个人的身高为 hi ,前面 正好 有 ki 个身高大于或等于 hi 的人。请你重新构造并返回输入数组 people 所表示的队列。返回的队列应该格式化为数组 queue ,其中 queue[j] = [hj, kj] 是队列中第 j 个人的属性(queue[0] 是排在队列前面的人)。示例 1:输入:people = [[7,.原创 2022-03-14 20:14:00 · 71 阅读 · 0 评论 -
LeetCode 2006. 差的绝对值为 K 的数对数目(哈希计数
差的绝对值为 K 的数对数目给你一个整数数组 nums 和一个整数 k ,请你返回数对 (i, j) 的数目,满足 i < j 且 |nums[i] - nums[j]| == k 。|x| 的值定义为:如果 x >= 0 ,那么值为 x 。如果 x < 0 ,那么值为 -x 。示例 1:输入:nums = [1,2,2,1], k = 1输出:4解释:差的绝对值为 1 的数对为:[1,2,2,1][1,2,2,1][1,2,2,1][1,2,2,1]示例 .原创 2022-02-09 11:01:50 · 313 阅读 · 0 评论 -
LeetCode746. 使用最小花费爬楼梯(dp
使用最小花费爬楼梯给你一个整数数组 cost ,其中 cost[i] 是从楼梯第 i 个台阶向上爬需要支付的费用。一旦你支付此费用,即可选择向上爬一个或者两个台阶。你可以选择从下标为 0 或下标为 1 的台阶开始爬楼梯。请你计算并返回达到楼梯顶部的最低花费。示例 1:输入:cost = [10,15,20]输出:15解释:你将从下标为 1 的台阶开始。支付 15 ,向上爬两个台阶,到达楼梯顶部。总花费为 15 。示例 2:输入:cost = [1,100,1,1,1,100,1.原创 2022-03-08 19:00:44 · 84 阅读 · 0 评论 -
LeetCode617. 合并二叉树(dfs
合并二叉树给你两棵二叉树: root1 和 root2 。想象一下,当你将其中一棵覆盖到另一棵之上时,两棵树上的一些节点将会重叠(而另一些不会)。你需要将这两棵树合并成一棵新二叉树。合并的规则是:如果两个节点重叠,那么将这两个节点的值相加作为合并后节点的新值;否则,不为 null 的节点将直接作为新二叉树的节点。返回合并后的二叉树。注意: 合并过程必须从两个树的根节点开始。示例 1:输入:root1 = [1,3,2,5], root2 = [2,1,3,null,4,null,7]输出:.原创 2022-03-06 19:52:38 · 76 阅读 · 0 评论 -
LeetCode543. 二叉树的直径(dfs)
二叉树的直径给定一棵二叉树,你需要计算它的直径长度。一棵二叉树的直径长度是任意两个结点路径长度中的最大值。这条路径可能穿过也可能不穿过根结点。示例 :给定二叉树 1 / \ 2 3 / \ 4 5 返回 3, 它的长度是路径 [4,2,1,3] 或者 [5,2,1,3]。/** * Definition for a binary tree node. * public class TreeNode { * int .原创 2022-03-06 19:40:59 · 216 阅读 · 0 评论 -
Acwing1241. 外卖店优先级
package PTA;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.util.Arrays;public class Main { public static void main(String[] args) throws IOException { BufferedReader in = new Buffered原创 2021-12-20 10:25:55 · 120 阅读 · 0 评论 -
LeetCode 200. 岛屿数量(dfs)
岛屿数量给你一个由 ‘1’(陆地)和 ‘0’(水)组成的的二维网格,请你计算网格中岛屿的数量。岛屿总是被水包围,并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。此外,你可以假设该网格的四条边均被水包围。示例 1:输入:grid = [[“1”,“1”,“1”,“1”,“0”],[“1”,“1”,“0”,“1”,“0”],[“1”,“1”,“0”,“0”,“0”],[“0”,“0”,“0”,“0”,“0”]]输出:1示例 2:输入:grid = [[“1”,“1”.原创 2021-12-18 20:06:39 · 79 阅读 · 0 评论 -
213. 打家劫舍 II(动态规划)
打家劫舍 II你是一个专业的小偷,计划偷窃沿街的房屋,每间房内都藏有一定的现金。这个地方所有的房屋都 围成一圈 ,这意味着第一个房屋和最后一个房屋是紧挨着的。同时,相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警 。给定一个代表每个房屋存放金额的非负整数数组,计算你 在不触动警报装置的情况下 ,今晚能够偷窃到的最高金额。示例 1:输入:nums = [2,3,2]输出:3解释:你不能先偷窃 1 号房屋(金额 = 2),然后偷窃 3 号房屋(金额 = 2.原创 2021-12-12 20:08:44 · 84 阅读 · 0 评论 -
LeetCode 198. 打家劫舍(动态规划)
打家劫舍你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组,计算你 不触动警报装置的情况下 ,一夜之内能够偷窃到的最高金额。示例 1:输入:[1,2,3,1]输出:4解释:偷窃 1 号房屋 (金额 = 1) ,然后偷窃 3 号房屋 (金额 = 3)。偷窃到的最高金额 = 1 + 3 = 4 。示例 2:输入:[2.原创 2021-12-12 16:55:27 · 83 阅读 · 0 评论 -
LeetCode 394. 字符串解码(栈)
package PTA;import sun.awt.SunHints;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.util.*;public class Main { public static void main(String[] args) throws IOException { // Buffered原创 2021-12-11 22:05:34 · 88 阅读 · 0 评论 -
LeetCode 400. 第 N 位数字(数学模拟)
第 N 位数字给你一个整数 n ,请你在无限的整数序列 [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, …] 中找出并返回第 n 位上的数字。示例 1:输入:n = 3输出:3示例 2:输入:n = 11输出:0解释:第 11 位数字在序列 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, … 里是 0 ,它是 10 的一部分。内存超限class Solution { public int findNthDigit(int n) { .原创 2021-11-30 20:17:08 · 74 阅读 · 0 评论 -
LeetCode 32. 最长有效括号(DP动态规划)
class Solution { public int longestValidParentheses(String s) { if(s.length()<=1){ return 0; } //f[i]代表以第i个字符结尾可以组成最长的有效字符串。 int f[] = new int[s.length()+1]; Deque<Character> stack = new ArrayD原创 2021-11-29 21:02:10 · 291 阅读 · 0 评论 -
LeetCode700. 二叉搜索树中的搜索
二叉搜索树中的搜索给定二叉搜索树(BST)的根节点和一个值。 你需要在BST中找到节点值等于给定值的节点。 返回以该节点为根的子树。 如果节点不存在,则返回 NULL。例如,给定二叉搜索树: 4 / \ 2 7 / \1 3和值: 2你应该返回如下子树: 2 / \ 1 3class Solution { public TreeNode searchBST(TreeNode root, int val) { .原创 2021-11-26 19:26:51 · 3858 阅读 · 0 评论 -
LeetCode287. 寻找重复数(环形链表,二分,好难啊)
寻找重复数给定一个包含 n + 1 个整数的数组 nums ,其数字都在 1 到 n 之间(包括 1 和 n),可知至少存在一个重复的整数。假设 nums 只有 一个重复的整数 ,找出 这个重复的数 。你设计的解决方案必须不修改数组 nums 且只用常量级 O(1) 的额外空间。示例 1:输入:nums = [1,3,4,2,2]输出:2示例 2:输入:nums = [3,1,3,4,2]输出:3示例 3:输入:nums = [1,1]输出:1示例 4:输入:nums = [.原创 2021-11-24 20:47:21 · 1160 阅读 · 0 评论 -
LeetCode 剑指 Offer II 103. 最少的硬币数目(动态规划)
剑指 Offer II 103. 最少的硬币数目给定不同面额的硬币 coins 和一个总金额 amount。编写一个函数来计算可以凑成总金额所需的最少的硬币个数。如果没有任何一种硬币组合能组成总金额,返回 -1。你可以认为每种硬币的数量是无限的。示例 1:输入:coins = [1, 2, 5], amount = 11输出:3解释:11 = 5 + 5 + 1示例 2:输入:coins = [2], amount = 3输出:-1示例 3:输入:coins = [1], amount原创 2021-11-24 19:36:37 · 1219 阅读 · 0 评论 -
LeetCode 423. 从英文中重建数字(脑筋急转弯)
从英文中重建数字给你一个字符串 s ,其中包含字母顺序打乱的用英文单词表示的若干数字(0-9)。按 升序 返回原始的数字。示例 1:输入:s = “owoztneoer”输出:“012”示例 2:输入:s = “fviefuro”输出:“45”提示:1 <= s.length <= 105s[i] 为 [“e”,“g”,“f”,“i”,“h”,“o”,“n”,“s”,“r”,“u”,“t”,“w”,“v”,“x”,“z”] 这些字符之一看题解的:通过题解的方式,先寻找出.原创 2021-11-24 19:16:19 · 244 阅读 · 0 评论 -
LeetCode 461. 汉明距离(二进制)
汉明距离两个整数之间的 汉明距离 指的是这两个数字对应二进制位不同的位置的数目。给你两个整数 x 和 y,计算并返回它们之间的汉明距离。示例 1:输入:x = 1, y = 4输出:2解释:1 (0 0 0 1)4 (0 1 0 0)↑ ↑上面的箭头指出了对应二进制位不同的位置。示例 2:输入:x = 3, y = 1输出:1注:先求出每个数的二进制表示,然后 由后向前进行比较。class Solution { public int hammingDista.原创 2021-11-22 10:44:49 · 229 阅读 · 0 评论 -
LeetCode 226. 翻转二叉树(递归)
翻转二叉树翻转一棵二叉树。注:相当于是对于每一层的左边节点和右边节点(这里的左边和右边包括了当前节点的子节点)进行交换。class Solution { public TreeNode invertTree(TreeNode root) { //递归函数的终止条件,节点为空时返回 if(root==null) { return null; } //下面三句是将当前节点的左右子树交换 TreeNode tmp = root.right; root.right = r.原创 2021-11-22 10:15:52 · 478 阅读 · 0 评论 -
LeetCode 1094. 拼车( PriorityQueue
拼车假设你是一位顺风车司机,车上最初有 capacity 个空座位可以用来载客。由于道路的限制,车 只能 向一个方向行驶(也就是说,不允许掉头或改变方向,你可以将其想象为一个向量)。这儿有一份乘客行程计划表 trips[][],其中 trips[i] = [num_passengers, start_location, end_location] 包含了第 i 组乘客的行程信息:必须接送的乘客数量;乘客的上车地点;以及乘客的下车地点。这些给出的地点位置是从你的 初始 出发位置向前行驶到这些地.原创 2021-11-17 20:18:51 · 104 阅读 · 0 评论 -
LeetCode 面试题 02.06. 回文链表(数组链表
面试题 02.06. 回文链表编写一个函数,检查输入的链表是否是回文的。示例 1:输入: 1->2输出: false示例 2:输入: 1->2->2->1输出: true/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { val = x; } * } */原创 2021-11-17 11:17:40 · 1051 阅读 · 0 评论 -
LeetCode1108. IP 地址无效化(又是简单题糊弄的一天)
IP 地址无效化给你一个有效的 IPv4 地址 address,返回这个 IP 地址的无效化版本。所谓无效化 IP 地址,其实就是用 “[.]” 代替了每个 “.”。示例 1:输入:address = “1.1.1.1”输出:“1[.]1[.]1[.]1”示例 2:输入:address = “255.100.50.0”输出:“255[.]100[.]50[.]0”class Solution { public String defangIPaddr(String address) {.原创 2021-11-17 11:09:27 · 1937 阅读 · 0 评论 -
LeetCode1209. 删除字符串中的所有相邻重复项 II(栈)
删除字符串中的所有相邻重复项 II给你一个字符串 s,「k 倍重复项删除操作」将会从 s 中选择 k 个相邻且相等的字母,并删除它们,使被删去的字符串的左侧和右侧连在一起。你需要对 s 重复进行无限次这样的删除操作,直到无法继续为止。在执行完所有删除操作后,返回最终得到的字符串。本题答案保证唯一。示例 1:输入:s = “abcd”, k = 2输出:“abcd”解释:没有要删除的内容。示例 2:输入:s = “deeedbbcccbdaa”, k = 3输出:“aa”解释:先.原创 2021-11-16 20:11:37 · 189 阅读 · 0 评论 -
LeetCode 409. 最长回文串(构造最长回文判断)
最长回文串给定一个包含大写字母和小写字母的字符串,找到通过这些字母构造成的最长的回文串。在构造过程中,请注意区分大小写。比如 “Aa” 不能当做一个回文字符串。注意:假设字符串的长度不会超过 1010。示例 1:输入:“abccccdd”输出:7解释:我们可以构造的最长的回文串是"dccaccd", 它的长度是 7。看题解得,简单题也不简单。该题并不是寻找最长回文子串,是用给出得字符串来重新排列组合成一个最长得回文字符串。大概意思是: 回文数必须要满足得条件是最多有一个字符.原创 2021-11-16 19:37:23 · 2020 阅读 · 0 评论 -
LeetCode 面试题 08.04. 幂集(回溯)
面试题 08.04. 幂集幂集。编写一种方法,返回某集合的所有子集。集合中不包含重复的元素。说明:解集不能包含重复的子集。示例:输入: nums = [1,2,3]输出:[[3],[1],[2],[1,2,3],[1,3],[2,3],[1,2],[]]class Solution { public List<List<Integer>> subsets(int[] nums) { List<List<Integer&原创 2021-11-15 18:43:22 · 1027 阅读 · 0 评论 -
LeetCode 520. 检测大写字母
检测大写字母我们定义,在以下情况时,单词的大写用法是正确的:全部字母都是大写,比如 “USA” 。单词中所有字母都不是大写,比如 “leetcode” 。如果单词不只含有一个字母,只有首字母大写, 比如 “Google” 。给你一个字符串 word 。如果大写用法正确,返回 true ;否则,返回 false 。示例 1:输入:word = “USA”输出:true示例 2:输入:word = “FlaG”输出:falseclass Solution { public .原创 2021-11-13 19:58:49 · 781 阅读 · 0 评论 -
LeetCode 78. 子集(回溯)
子集给你一个整数数组 nums ,数组中的元素 互不相同 。返回该数组所有可能的子集(幂集)。解集 不能 包含重复的子集。你可以按 任意顺序 返回解集。示例 1:输入:nums = [1,2,3]输出:[[],[1],[2],[1,2],[3],[1,3],[2,3],[1,2,3]]示例 2:输入:nums = [0]输出:[[],[0]]class Solution { public List<List<Integer>> subsets(int[] n.原创 2021-11-12 20:53:27 · 85 阅读 · 0 评论 -
LeetCode 56. 合并区间(sort对二维数组排序)
合并区间以数组 intervals 表示若干个区间的集合,其中单个区间为 intervals[i] = [starti, endi] 。请你合并所有重叠的区间,并返回一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间。示例 1:输入:intervals = [[1,3],[2,6],[8,10],[15,18]]输出:[[1,6],[8,10],[15,18]]解释:区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6].示例 2:输入:intervals = [[1,4].原创 2021-11-10 10:17:41 · 212 阅读 · 0 评论 -
LeetCode 495. 提莫攻击
提莫攻击在《英雄联盟》的世界中,有一个叫 “提莫” 的英雄。他的攻击可以让敌方英雄艾希(编者注:寒冰射手)进入中毒状态。当提莫攻击艾希,艾希的中毒状态正好持续 duration 秒。正式地讲,提莫在 t 发起发起攻击意味着艾希在时间区间 [t, t + duration - 1](含 t 和 t + duration - 1)处于中毒状态。如果提莫在中毒影响结束 前 再次攻击,中毒状态计时器将会 重置 ,在新的攻击之后,中毒影响将会在 duration 秒后结束。给你一个 非递减 的整数数组 t.原创 2021-11-10 09:20:44 · 367 阅读 · 0 评论 -
1066 图像过滤 (15 分)(超大时
1066 图像过滤 (15 分)图像过滤是把图像中不重要的像素都染成背景色,使得重要部分被凸显出来。现给定一幅黑白图像,要求你将灰度值位于某指定区间内的所有像素颜色都用一种指定的颜色替换。输入格式:输入在第一行给出一幅图像的分辨率,即两个正整数 M 和 N(0<M,N≤500),另外是待过滤的灰度值区间端点 A 和 B(0≤A<B≤255)、以及指定的替换灰度值。随后 M 行,每行给出 N 个像素点的灰度值,其间以空格分隔。所有灰度值都在 [0, 255] 区间内。输出格式:输出按要求原创 2021-11-09 20:44:37 · 79 阅读 · 0 评论 -
3. 完全背包问题(背包问题)
完全背包问题有 N 种物品和一个容量是 V 的背包,每种物品都有无限件可用。第 i 种物品的体积是 vi,价值是 wi。求解将哪些物品装入背包,可使这些物品的总体积不超过背包容量,且总价值最大。输出最大价值。输入格式第一行两个整数,N,V,用空格隔开,分别表示物品种数和背包容积。接下来有 N 行,每行两个整数 vi,wi,用空格隔开,分别表示第 i 种物品的体积和价值。输出格式输出一个整数,表示最大价值。数据范围0<N,V≤10000<vi,wi≤1000输入样例.原创 2021-11-03 08:58:27 · 197 阅读 · 0 评论 -
LeetCode 575. 分糖果
分糖果给定一个偶数长度的数组,其中不同的数字代表着不同种类的糖果,每一个数字代表一个糖果。你需要把这些糖果平均分给一个弟弟和一个妹妹。返回妹妹可以获得的最大糖果的种类数。示例 1:输入: candies = [1,1,2,2,3,3]输出: 3解析: 一共有三种种类的糖果,每一种都有两个。最优分配方案:妹妹获得[1,2,3],弟弟也获得[1,2,3]。这样使妹妹获得糖果的种类数最多。示例 2 :输入: candies = [1,1,2,3]输出: 2解析: 妹妹获得糖果[2,3],弟.原创 2021-11-01 16:24:18 · 130 阅读 · 0 评论 -
416. 分割等和子集(dp背包问题思路)
分割等和子集给你一个 只包含正整数 的 非空 数组 nums 。请你判断是否可以将这个数组分割成两个子集,使得两个子集的元素和相等。示例 1:输入:nums = [1,5,11,5]输出:true解释:数组可以分割成 [1, 5, 5] 和 [11] 。示例 2:输入:nums = [1,2,3,5]输出:false解释:数组不能分割成两个元素和相等的子集。本来想过双指针,但是指针夹住的和是固定的,数的位置也是固定的,也就是说只能算出连续挨着的数的和,不能实现自由组合。所以不行答案.原创 2021-10-24 21:35:04 · 260 阅读 · 0 评论 -
LeetCode 638. 大礼包(记忆化搜索,dfs)
大礼包在 LeetCode 商店中, 有 n 件在售的物品。每件物品都有对应的价格。然而,也有一些大礼包,每个大礼包以优惠的价格捆绑销售一组物品。给你一个整数数组 price 表示物品价格,其中 price[i] 是第 i 件物品的价格。另有一个整数数组 needs 表示购物清单,其中 needs[i] 是需要购买第 i 件物品的数量。还有一个数组 special 表示大礼包,special[i] 的长度为 n + 1 ,其中 special[i][j] 表示第 i 个大礼包中内含第 j 件物品的.原创 2021-10-24 19:54:33 · 195 阅读 · 0 评论 -
LeetCode 229. 求众数 II
求众数 II给定一个大小为 n 的整数数组,找出其中所有出现超过 ⌊ n/3 ⌋ 次的元素。示例 1:输入:[3,2,3]输出:[3]示例 2:输入:nums = [1]输出:[1]示例 3:输入:[1,1,1,3,3,2,2,2]输出:[1,2]做法和(和外观数列差不多)class Solution { public List<Integer> majorityElement(int[] nums) { List<Integer>.原创 2021-10-22 17:28:18 · 209 阅读 · 0 评论 -
1022 D进制的A+B (20 分)
1022 D进制的A+B (20 分)输入两个非负 10 进制整数 A 和 B (≤230−1),输出 A+B 的 D (1<D≤10)进制数。输入格式:输入在一行中依次给出 3 个整数 A、B 和 D。输出格式:输出 A+B 的 D 进制数。输入样例:123 456 8输出样例:1103import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;pu原创 2021-10-21 20:24:00 · 57 阅读 · 0 评论 -
1084 外观数列 (20 分)(递归)
1084 外观数列 (20 分)外观数列是指具有以下特点的整数序列:d, d1, d111, d113, d11231, d112213111, …它从不等于 1 的数字 d 开始,序列的第 n+1 项是对第 n 项的描述。比如第 2 项表示第 1 项有 1 个 d,所以就是 d1;第 2 项是 1 个 d(对应 d1)和 1 个 1(对应 11),所以第 3 项就是 d111。又比如第 4 项是 d113,其描述就是 1 个 d,2 个 1,1 个 3,所以下一项就是 d11231。当然这个定义对原创 2021-10-20 21:46:27 · 147 阅读 · 0 评论