自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(49)
  • 收藏
  • 关注

原创 SSL_connect: SSL_ERROR_SYSCALL in connection to github.com:443解决办法

问题如题。搜了很多方法,都没效果。最后电脑重启就好了。==!记录????

2021-03-09 16:57:13 495

原创 剑指 Offer 61. 扑克牌中的顺子

从扑克牌中随机抽5张牌,判断是不是一个顺子,即这5张牌是不是连续的。2~10为数字本身,A为1,J为11,Q为12,K为13,而大、小王为0 ,可以看成任意数字。A 不能视为 14。示例 1:输入: [1,2,3,4,5]输出: True示例 2:输入: [0,0,1,2,5]输出: True限制:数组长度为 5数组的数取值为 [0, 13] .思路:1,除0以外,最大值最小值之差不能超过52,除0以外,5个数中不能有重复数字var isStraight = function(.

2020-11-26 23:45:01 125

原创 剑指 Offer 40. 最小的k个数

输入整数数组 arr ,找出其中最小的 k 个数。例如,输入4、5、1、6、2、7、3、8这8个数字,则最小的4个数字是1、2、3、4。示例 1:输入:arr = [3,2,1], k = 2输出:[1,2] 或者 [2,1]示例 2:输入:arr = [0,1,2,1], k = 1输出:[0]限制:0 <= k <= arr.length <= 100000 <= arr[i] <= 10000方法一:排序var getLeastNumbers =.

2020-11-25 22:53:13 91

原创 剑指 Offer 21. 调整数组顺序使奇数位于偶数前面

输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分。示例:输入:nums = [1,2,3,4]输出:[1,3,2,4]注:[3,1,2,4] 也是正确的答案之一。方法一:第一次循环依次找到偶数和奇数,并且将其分别存放到新开辟的空间中。第二次循环将存放偶数和奇数的空间“连接”在一起。var exchange = function(nums) { const arr = []; // 奇数数组 const br.

2020-11-25 19:10:18 57

原创 剑指 Offer 11. 旋转数组的最小数字

把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。例如,数组[3,4,5,1,2] 为 [1,2,3,4,5] 的一个旋转,该数组的最小值为1。示例 1:输入:[3,4,5,1,2]输出:1示例 2:输入:[2,2,2,0,1]输出:0方法一:我们发现数组在旋转之后,有一个分界点,在分界点的两侧数组元素仍然是递增的,而这个分界点是后一个递增数组的首元素,也就是我们要找的数组中最小的数。遍历数组,找到后一个元素比前一个.

2020-11-25 18:36:30 44

原创 剑指 Offer 05. 替换空格

请实现一个函数,把字符串 s 中的每个空格替换成"%20"。示例 1:输入:s = “We are happy.”输出:“We%20are%20happy.”方法一:正则表达式var replaceSpace = function(s) { return s.replace(/\s/g,'%20');};方法二:首先判断输入是否合法,参数是字符串类型,字符串长度不能太长。再通过split(’ ')将空格隔开的单词变为字符串数组中的数组项最后通过join(’%20’)将各个.

2020-11-25 17:38:41 59

原创 剑指 Offer 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]思路:什么时候继续打印下一圈?也就是要找到循环的条件。什么时候结束循环呢?我们注意到一个4x4的矩阵,只有两圈,从第一圈到第二圈,打印的.

2020-11-25 17:17:17 68

原创 102. 二叉树的层序遍历

给你一个二叉树,请你返回其按 层序遍历 得到的节点值。 (即逐层地,从左到右访问所有节点)。示例:二叉树:[3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7返回其层次遍历结果:[ [3], [9,20], [15,7]]从上到下打印二叉树用队列可以实现,但是如果多行打印需要在行与行之间进行分割。如何分割呢?肯定要知道个数才能分割。又如何知道这一行有多少个呢?我们可以通过遍历上一层,通过它们的子树就可以.

2020-11-21 18:11:12 113

原创 34. 在排序数组中查找元素的第一个和最后一个位置

给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。你的算法时间复杂度必须是 O(log n) 级别。如果数组中不存在目标值,返回 [-1, -1]。示例 1:输入: nums = [5,7,7,8,8,10], target = 8输出: [3,4]示例 2:输入: nums = [5,7,7,8,8,10], target = 6输出: [-1,-1]方法一:APIvar searchRange = function(.

2020-11-21 17:54:32 139

原创 557. 反转字符串中的单词 III

给定一个字符串,你需要反转字符串中每个单词的字符顺序,同时仍保留空格和单词的初始顺序。示例:输入:“Let’s take LeetCode contest”输出:“s’teL ekat edoCteeL tsetnoc”提示:在字符串中,每个单词由单个空格分隔,并且字符串中不会有任何额外的空格。方法一:先将s按空格分割成由s里各个单词组成的数组用map对每个单词进行翻转再将翻转好的单词的数组用空格连接起来var reverseWords = function(s) { re.

2020-11-20 14:14:29 94

原创 231. 2的幂

给定一个整数,编写一个函数来判断它是否是 2 的幂次方。示例 1:输入: 1 输出: true解释: 2^0 = 1示例 2:输入: 16输出: true解释: 2^4 = 16示例 3:输入: 218输出: false方法一:直观思路,判断是否能一直被2整除,最后除为1。var isPowerOfTwo = function(n) { if(n <= 0) return false; while(n%2 ==0){ n = n/2; .

2020-11-20 00:25:35 87

原创 122. 买卖股票的最佳时机 II

给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。示例 1:输入: [7,1,5,3,6,4]输出: 7解释: 在第 2 天(股票价格 = 1)的时候买入,在第 3 天(股票价格 =5)的时候卖出, 这笔交易所能获得利润 = 5-1 = 4 。随后,在第 4 天(股票价格 = 3)的时候买入,在第 5 天(股票价格 = 6).

2020-11-19 23:34:06 55

原创 412. Fizz Buzz

写一个程序,输出从 1 到 n 数字的字符串表示。1.如果 n 是3的倍数,输出“Fizz”;2.如果 n 是5的倍数,输出“Buzz”;3.如果 n 同时是3和5的倍数,输出 “FizzBuzz”。示例:n = 15,返回: [ “1”,“2”,“Fizz”, “4”, “Buzz”, “Fizz”, “7”, “8”, “Fizz”, “Buzz”,“11”,“Fizz”, “13”,“14”,“FizzBuzz” ]方法一: 条件判断初始化一个空的答案列表。遍历,对于每个数,判断.

2020-11-18 22:43:04 514

原创 387. 字符串中的第一个唯一字符

给定一个字符串,找到它的第一个不重复的字符,并返回它的索引。如果不存在,则返回 -1。示例:s = “leetcode” 返回 0s = “loveleetcode” 返回 2提示:你可以假定该字符串只包含小写字母。方法一:Map建立一个map,遍历一遍字符串记录每个字符出现的次数,再遍历一次找到第一个map[s[i]]中value为1的字符的下标i。没有则返回-1。var firstUniqChar = function(s) { let map = new Map(); .

2020-11-18 15:52:46 50

原创 28. 实现 strStr()

实现 strStr() 函数。给定一个 haystack 字符串和一个 needle 字符串,在 haystack 字符串中找出 needle 字符串出现的第一个位置(从0开始)。如果不存在,则返回 -1。示例 1:输入: haystack = “hello”, needle = “ll”输出: 2示例 2:输入: haystack = “aaaaa”, needle = “bba”输出: -1说明:当 needle 是空字符串时,我们应当返回什么值呢?这是一个在面试中很好的问题。对.

2020-11-17 22:11:33 81

原创 202. 快乐数

编写一个算法来判断一个数 n 是不是快乐数。「快乐数」定义为:对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和,然后重复这个过程直到这个数变为 1,也可能是 无限循环,始终变不到 1。如果 可以变为 1,那么这个数就是快乐数。如果 n 是快乐数就返回 True ;不是,则返回 False 。示例:输入:19输出:true解释:1^ 2 + 9^2 = 828^2 + 2^2 = 686^2 + 8^2 = 1001^2 + 0^2 + 0^2= 1根据我们的探索,我们.

2020-11-17 16:19:13 212 1

原创 69. x 的平方根

实现 int sqrt(int x) 函数。计算并返回 x 的平方根,其中 x 是非负整数。由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。示例 1:输入: 4输出: 2示例 2:输入: 8输出: 2说明: 8 的平方根是 2.82842…, 由于返回类型是整数,小数部分将被舍去。思路:二分查找设定查找的边界, 根据查找范围中间值的平方相较于 x 的大小, 将边界不断收缩到原来的 1 / 2定义 left = 1,right = Math.floor(x/2)两个.

2020-11-16 17:38:45 70

原创 38. 外观数列

给定一个正整数 n ,输出外观数列的第 n 项。「外观数列」是一个整数序列,从数字 1 开始,序列中的每一项都是对前一项的描述。你可以将其视作是由递归公式定义的数字字符串序列:countAndSay(1) = “1”countAndSay(n) 是对 countAndSay(n-1)的描述,然后转换成另一个数字字符串。前五项如下:111211211111221第一项是数字 1描述前一项,这个数是 1 即 “ 一 个 1 ”,记作 “11”描述前一项,这个数是 11 即 “ 二 .

2020-11-16 16:28:20 100

原创 268. 丢失的数字

给定一个包含 [0, n] 中 n 个数的数组 nums ,找出 [0, n] 这个范围内没有出现在数组中的那个数。进阶:你能否实现线性时间复杂度、仅使用额外常数空间的算法解决此问题?示例 1:输入:nums = [3,0,1]输出:2解释:n = 3,因为有 3 个数字,所以所有的数字都在范围 [0,3] 内。2是丢失的数字,因为它没有出现在 nums 中。示例 2:输入:nums = [0,1]输出:2解释:n = 2,因为有 2 个数字,所以所有的数字都在范围 [0,2] 内。.

2020-11-15 15:05:39 109

原创 350. 两个数组的交集 II

给定两个数组,编写一个函数来计算它们的交集。示例 1:输入:nums1 = [1,2,2,1], nums2 = [2,2]输出:[2,2]示例 2:输入:nums1 = [4,9,5], nums2 = [9,4,9,8,4]输出:[4,9]说明:输出结果中每个元素出现的次数,应与元素在两个数组中出现次数的最小值一致。 我们可以不考虑输出结果的顺序。进阶:如果给定的数组已经排好序呢?你将如何优化你的算法?如果 nums1 的大小比 nums2 小很多,哪种方法更优?如果 nums.

2020-11-15 01:01:18 86

原创 14. 最长公共前缀

编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串 “”。示例 1:输入: [“flower”,“flow”,“flight”]输出: “fl”示例 2:输入: [“dog”,“racecar”,“car”]输出: “”解释: 输入不存在公共前缀。说明:所有输入只包含小写字母 a-z 。解法一:逐个比较解题思路: 从前往后一次比较字符串,获取公共前缀var longestCommonPrefix = function(strs) { if (st.

2020-11-15 00:30:11 146

原创 7. 整数反转

给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。示例 1:输入: 123 输出: 321示例 2:输入: -123 输出: -321示例 3:输入: 120 输出: 21注意:假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−2^31, 2^31 −1]。请根据这个假设,如果反转后整数溢出那么就返回 0。方法一:取符号绝对值转换字符串,转换成数组反转后拼接成字符串,乘上符号判断溢出var reverse = function(x.

2020-11-14 23:56:44 103

原创 442. 数组中重复的数据

给定一个整数数组 a,其中1 ≤ a[i] ≤ n (n为数组长度), 其中有些元素出现两次而其他元素出现一次。找到所有出现两次的元素。思路:由于数组的元素取值范围是 [1, N],所以可以在输入数组本身以某种方式标记已访问过的数字。用 |nums[i]|-1 索引位置的元素设为负数作为访问的标记。即nums[∣nums[i]∣−1]×−1 。遍历数组,判断数组元素nums[∣nums[i]∣−1]是否为负数,如果为负数,说明已经访问过一次,即出现了两次,把∣nums[i]∣添加到结果数组。.

2020-11-14 22:35:29 88

原创 448. 找到所有数组中消失的数字

给定一个范围在 1 ≤ a[i] ≤ n ( n = 数组大小 ) 的 整型数组,数组中的元素一些出现了两次,另一些只出现一次。找到所有在 [1, n] 范围之间没有出现在数组中的数字。方法一:使用哈希表用一个哈希表 hash 或者集合 set 来记录在数组中遇到的数字。遍历给定数组的元素,插入到哈希表中,因为我们并不关心数字出现的次数,所以即使哈希表中已经存在某元素,再次插入了也会覆盖,现在我们知道了数组中存在那些数字,只需从1⋯N 范围中找到缺失的数字。从 1⋯N 检查哈希表中是否存在,若不存.

2020-11-14 22:28:25 141

原创 155. 最小栈

设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈。push(x) —— 将元素 x 推入栈中。pop() —— 删除栈顶的元素。top() —— 获取栈顶元素。getMin() ——检索栈中的最小元素。提示:pop、top 和 getMin 操作总是在 非空栈 上调用。思路:增加一个辅助栈,每次压入数据时,把当前数据栈中最小的值压入辅助栈,这样辅助栈的栈顶元素一直是数据栈中的最小值。每次弹出也要把辅助栈中的栈顶弹出。/** * initialize .

2020-11-14 21:09:45 53

原创 160. 相交链表

编写一个程序,找到两个单链表相交的起始节点。如下面的两个链表:在节点 c1 开始相交。注意:如果两个链表没有交点,返回 null.在返回结果后,两个链表仍须保持原有的结构。可假定整个链表结构中没有循环。程序尽量满足 O(n) 时间复杂度,且仅用 O(1) 内存。方法一:双指针法创建两个指针 p1 和 p2,分别初始化为链表 A 和 B 的头结点。然后让它们向后逐结点遍历。当两个链表长度相同时,索引比较对应节点,直到遇到相同节点则返回公共头节点,遍历到链表结尾都没有遇则返回nul.

2020-11-14 20:48:18 44

原创 169. 多数元素

给定一个大小为 n 的数组,找到其中的多数元素。多数元素是指在数组中出现次数大于 ⌊ n/2 ⌋ 的元素。你可以假设数组是非空的,并且给定的数组总是存在多数元素。示例 1:输入: [3,2,3]输出: 3示例 2:输入: [2,2,1,1,1,2,2]输出: 2方法一:哈希表记录次数使用map来存储每个元素以及出现的次数。对于哈希映射中的每个键值对,键表示一个元素,值表示该元素出现的次数。 用一个循环遍历数组nums 并将数组中的每个元素加入哈希映射中。在这之后,我们遍历哈希映.

2020-11-14 17:58:22 128

原创 101. 对称二叉树

给定一个二叉树,检查它是否是镜像对称的。例如,二叉树 [1,2,2,3,4,4,3] 是对称的。 1 / \ 2 2 / \ / \3 4 4 3但是下面这个 [1,2,2,null,3,null,3] 则不是镜像对称的: 1 / \ 2 2 \ \ 3 3 方法一:递归二叉树的遍历问题最容易想到的就是递归,因为子树结构和整棵树都一样,可以用相同的方法递归遍历。根结点为空,直接返回true根结点不为空,比较左右子.

2020-11-13 16:06:03 54

原创 283. 移动零

给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。示例:输入: [0,1,0,3,12]输出: [1,3,12,0,0]说明:必须在原数组上操作,不能拷贝额外的数组。尽量减少操作次数。方法1:非0项覆盖到数组前头遍历数组,将所有非0项一一覆盖到数组的前头然后将剩下的项覆盖为0没有项的交换,没有改变数组长度,安排了所有非0项,剩下位置属于0var moveZeroes = function(nums) { let n = num.

2020-11-13 02:32:32 31

原创 617. 合并二叉树

给定两个二叉树,想象当你将它们中的一个覆盖到另一个上时,两个二叉树的一些节点便会重叠。你需要将他们合并为一个新的二叉树。合并的规则是如果两个节点重叠,那么将他们的值相加作为节点合并后的新值,否则不为 NULL的节点将直接作为新二叉树的节点。示例 1:输入: Tree 1 Tree 2 1 2 .

2020-11-13 02:03:10 81

原创 198. 打家劫舍

你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组,计算你不触动警报装置的情况下 ,一夜之内能够偷窃到的最高金额。示例 1:输入:[1,2,3,1]输出:4解释:偷窃 1 号房屋 (金额 = 1) ,然后偷窃 3 号房屋 (金额 = 3)。偷窃到的最高金额 = 1 + 3 = 4 。示例 2:输入:[2,7,.

2020-11-13 01:48:58 35

原创 20. 有效的括号

给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。注意空字符串可被认为是有效字符串。思路:括号配对问题想到利用一个辅助栈。利用栈后进先出的特性来控制括号匹配的顺序。遇到一个左括号就把对应的右括号压入栈。遇到右括号时判断当前栈是否为空,为空说明在此之前没有和这个右括号配对的左括号,直接返回false。或者这个右括号不等于栈顶元素,说明括号的匹配顺序不正确,也返回fa.

2020-11-13 01:21:58 55

原创 141. 环形链表

给定一个链表,判断链表中是否有环。如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。为了表示给定链表中的环,我们使用整数 pos来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。注意:pos不作为参数进行传递,仅仅是为了标识链表的实际情况。如果链表中存在环,则返回 true 。 否则,返回 false 。方法一:哈希表遍历链表,哈希表中没有则加入,再次访问说明有环。var hasCycle = function(h.

2020-11-13 00:16:12 83

原创 543. 二叉树的直径

给定一棵二叉树,你需要计算它的直径长度。一棵二叉树的直径长度是任意两个结点路径长度中的最大值。这条路径可能穿过也可能不穿过根结点。示例 :给定二叉树 1 / \ 2 3 / \ 4 5 返回 3, 它的长度是路径 [4,2,1,3] 或者 [5,2,1,3]。注意:两结点之间的路径长度是以它们之间边的数目表示。解题思路:二叉树的直径可以转化成二叉树的左右子树高度之和。求直径长度的最大.

2020-11-12 23:25:22 72

原创 234. 回文链表

请判断一个链表是否为回文链表。方法一:将链表转换为数组,用双指针头尾遍历比较是否是回文。数组列表底层是使用数组存储值,我们可以通过索引在 O(1) 的时间访问列表任何位置的值,这是由基于内存寻址的方式。链表存储的是称为节点的对象,每个节点保存一个值和指向下一个节点的指针。访问某个特定索引的节点需要 O(n)的时间,因为要通过指针获取到下一个位置的节点。确定数组列表是否回文很简单,我们可以使用双指针法来比较两端的元素,并向中间移动。一个指针从起点向中间移动,另一个指针从终点向中间移动。这需要O(n)

2020-11-12 19:45:50 46

原创 226. 翻转二叉树

翻转一棵二叉树。示例:输入: 4 / \ 2 7 / \ / \1 3 6 9输出: 4 / \ 7 2 / \ / \9 6 3 1思路:递归从根节点开始,递归地对树进行遍历,并从叶子结点先开始翻转。如果当前遍历到的节点 root 的左右两棵子树都已经翻转,那么我们只需要交换两棵子树的位置,即可完成以 root 为根节点的整棵子树的翻转。/** * Definition for a binar

2020-11-12 18:51:02 39

原创 leetcode121. 买卖股票的最佳时机

给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。如果你最多只允许完成一笔交易(即买入和卖出一支股票一次),设计一个算法来计算你所能获取的最大利润。注意:你不能在买入股票前卖出股票。示例 1:输入: [7,1,5,3,6,4]输出: 5解释: 在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 =6)的时候卖出,最大利润 = 6-1 = 5 。注意利润不能是 7-1 = 6, 因为卖出价格需要大于买入价格;同时,你不能在买入前卖出股票。示例 2:输入.

2020-11-12 18:27:12 46

原创 463. 岛屿的周长

给定一个包含 0 和 1 的二维网格地图,其中 1 表示陆地 0 表示水域。网格中的格子水平和垂直方向相连(对角线方向不相连)。整个网格被水完全包围,但其中恰好有一个岛屿(或者说,一个或多个表示陆地的格子相连组成的岛屿)。岛屿中没有“湖”(“湖” 指水域在岛屿内部且不和岛屿周围的水相连)。格子是边长为 1 的正方形。网格为长方形,且宽度和高度均不超过 100。计算这个岛屿的周长。示例 :输入:[[0,1,0,0],[1,1,1,0],[0,1,0,0],[1,1,0,0]]输出.

2020-11-12 03:09:05 95

原创 合并两个有序数组

给你两个有序整数数组 nums1 和 nums2,请你将 nums2 合并到 nums1 中,使 nums1 成为一个有序数组。说明:初始化 nums1 和 nums2 的元素数量分别为 m 和 n 。你可以假设 nums1 有足够的空间(空间大小大于或等于 m +n)来保存 nums2 中的元素。示例:输入:nums1 = [1,2,3,0,0,0], m = 3nums2 = [2,5,6], n = 3输出:[1,2,2,3,5,6]方法一:先合并两个数组,然后排序。.

2020-11-12 01:50:50 895 1

原创 验证回文子串

给定一个非空字符串 s,最多删除一个字符。判断是否能成为回文字符串。示例 1:输入: “aba”输出: True示例 2:输入: “abca”输出: True解释: 你可以删除c字符。贪心算法考虑最朴素的方法:首先判断原串是否是回文串,如果是,就返回 true;如果不是,则枚举每一个位置作为被删除的位置,再判断剩下的字符串是否是回文串。这种做法的渐进时间复杂度是 O(n^2),会超出时间限制。首先考虑如果不允许删除字符,如何判断一个字符串是否是回文串。常见的做法是使用双指针。定义左右.

2020-11-12 01:07:03 427

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除