自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 代码随想录 | 单调栈part01 part02 part03

还是得用单调栈,看了解答意识到,上一题是在找每个元素左右比它大的第一个元素,本题是在找每个元素左右比它小的第一个元素。注意,这里首尾两根柱子也可以用于计算最大面积,和接雨水有区别,因此需要在首尾添加元素保证边界不会出现在首尾柱子上。有两个思路,第一个是数组倍增两个连起来,模拟向前寻找的过程,但是需要注意储存结果时的下标。实际上是找左右两边第一个比它小的元素,据此确定宽度,以自己高度为高计算面积。寻找比它大的,则栈顶到栈底是递增的,反之则是递减的。确实有难度,需要仔细分析单调栈的三种情况才行。

2023-09-15 17:41:38 93

原创 代码随想录 | 动态规划 part16 part17

发现dp数组定义没问题,不过循环和递推公式写不出来,并且暴力法实际上是On^3的,不过python利用切片一定程度上降低了复杂度,这可能是没有超时的原因。还是没考虑全,当ij不相等的时候,得看把左边右边加上去,哪一边有更长的最长回文子序列,而不能粗暴地把ij两端都删掉。不对,看了解答发现dp数组定义变了,直接定义为ij之间最长回文子序列长度即可,只要ij相等即可+2。基本逻辑不变,如果ij字符相等,则判断中间是否回文,如果回文则延长后也是回文。二维dp表示ij之间子串是否为回文子串,最后对dp数组求和。

2023-09-14 14:54:32 90

原创 代码随想录 | 动态规划 part14 part15

先试一下,不对,无法判定复杂的顺序问题,并不是简单的找到每个字符重复了多少次的。当元素不相等时,只允许t删去元素不允许s删去,因此只能从左边推出dp不能从上边推出。连线就意味着不能打破顺序,但是可以删去中间不相同的元素,找到最长的相同子序列。dp表示i-1 j-1前面最长公共子序列长度,不要求必须以ij结尾。其次,只需要最后判断一下是否最大的dp等于s长度即可,不用每次都判断。还是要思考二维dp的解法,非常难,看了解答才大概理解dp怎么构建的。但是dpij可能从三个方向推导得到,左上,左边,上边。

2023-09-13 15:36:38 81

原创 代码随想录 | 动态规划 part13

内层对于每一个数字,都要检查它前面的所有递增子序列,判断是否能为最长的递增子序列进一步延长,因此是遍历所有小于外层i的下标。注意一点:必须是以i结尾的,这也就意味着dp[i]并不是从0到i最长的递增子序列,在所有的nums中取最大才是,但是要注意,构建dp数组时应比nums的长度大一个,并全部初始化为0。此时可以从dp[i-1][j-1]推出dp[i][j]dp表示以i-1和j-1为结尾的最长重复子数组长度,外层遍历数字,从1开始,因为第0个已经初始化过了,dp[i]表示以i结尾的最长递增子序列长度。

2023-09-12 21:51:40 64

原创 代码随想录 | 动态规划 part11 part12

第三步,要确定初始化,一些非法状态(如第一天的卖出,冷冻期等等)要从递推公式中去推导得到。第四步,要注意最后返回的结果是所有卖出后的取最大,不一定是dp[-1][-1]!啥也不干,第一次持有,第一次不持有,第二次持有,第二次不持有。第二步,判断一下每个状态可以从哪几个状态推导得到,然后取最大。上一题再变体,最多允许买卖k次,dp数据有2*k+1个状态。股票题变体,只允许买卖两次,dp数组共有5个状态。不持有且已出冷冻期(前一天或更早卖出)不持有且后一天冷冻期(当天卖出)第一步,分析清楚一共有几个状态。

2023-09-10 15:54:18 43

原创 代码随想录 | 动态规划 part10

再试一下dp,想错方向了,一开始是对的,需要在持有状态的dp更新时添加之前已有的利润,但是加错了,应该时累加上一次不持有的最大金额,因为只有上次未持有这次才能买入,看了解答明白了。看了解答发现实际上就是贪心的思想,取最左边最小值,取最右边最大值。先试着写了个暴力解法,低于n^2复杂度,居然超时了。这题之前做过,先试试不用dp能不能想出来怎么写的。相当于是分割数组,使得子数组的首末之差求和最大。bebug好多次终于过了,想的还是不严谨。关键是这个二维的dp数组想不到怎么建立。基本思路就是升值就买,跌就卖。

2023-08-24 17:31:51 37

原创 代码随想录 | 动态规划 part9

没写出来,看了解答发现每个dp元素需要存储两个数值,一个偷当前节点一个不偷当前节点的最大金额。还有一个点是,当不偷根节点时,左右孩子可偷,但是具体偷不偷得取最大的,不能无脑选左右孩子都偷。每家只能抢一次,01背包,无所谓顺序,先遍历物品再遍历背包,且内层循环从大到小。这问题并不是只有隔一个抢一个两种方式,因为可以隔很多个抢一个实现最大收益。背包问题,容量最大是所有家庭的金钱总和(不可能超过,最多相等)改变初始化策略,从最大的一个开始遍历,如此必然不会偷最后一个。物品是家庭,但是禁止连续拿相邻的两个物品。

2023-08-23 20:28:24 33

原创 代码随想录 | 动态规划part8

和背包有什么关系?字典表示物品,完全背包,但是背包容量是什么?背包容量是从s的第一个字符到最后一个字符特殊限制是只有符合字符串要求才能装看了解答,震惊,这居然也能直接用dp装是否能够拼成遍历顺序要注意,一定是先遍历背包再遍历物品,我在写得时候思路是要递推应该后检查物品所以自然这么写了解答中解释了,因为物品组成字符串时是有顺序的,所以应当是排列而非组合,所以必须先遍历背包后遍历物品

2023-08-23 15:00:06 39

原创 代码随想录 | 动态规划 part7

完全背包问题,物品就是小于n的完全平方数,求最少用多少个物品可以把包刚好装满。目标是n,可选物品为1,2,完全背包,问爬楼方式,考虑顺序。2、dp表示转化后的某个中间量,然后根据中间量再得到结果。单纯的完全背包问题不涉及装包顺序,因此两层循环可交换顺序。要注意n=1的时候先返回,否则初始化dp[2]会越界。看了解答发现可以直接让dp表示最少用的硬币数量。先遍历物品再遍历背包容量记录的是组合数(无顺序)先遍历背包容量再遍历物品记录的是排列数(有顺序)完全背包,但统计的是最少的硬币个数而非兑换方式。

2023-08-23 12:49:21 35

原创 代码随想录 动态规划part4 part5 part6

没有理解到这题本质是把石头分成重量尽可能相近的两堆的本质,看解答知道这一点后就很好写了res = sreturn res。

2023-08-22 19:51:37 18

原创 代码随想录 | 动态规划 part2 part3

看似复杂,但是实际上只要根据障碍更新初始值和更新过程中判断即可,但是一开始还是没意识到两点。第二,初始值,有障碍的后面所有都不再是1而是0。没有按照dp做,直接找的,debug两次后过的。这递推公式属实想不到,看解答才知道什么规律。用dfs深搜遍历超时,得二维dp。看了解答dp的思路,试着写一下。看了解答思路还是很容易理解的。第一,障碍有可能出现在起点。递归式子还是得搞清楚。

2023-08-18 09:18:40 37

原创 代码随想录 | 动态规划part1

下意识使用了递归解法,没有用dp的循环来写。

2023-08-09 19:14:47 32

原创 代码随想录 | 贪心算法part6

看了解答,思路和解答不一致,我是从前往后遍历的,解答是从后往前遍历的,解答的思路无需处理相等的特殊情况,还是解答的思路更好一些。

2023-08-09 16:24:45 34

原创 代码随想录 | 贪心算法part5

解答的思路和我一致,不过处理方法稍有不同,是先放入ans数组,然后如果出现重叠就更新ans中最后一个元素的第二个边界就好了,比我的更好一些,我多更新了许多元素的边界。先寻找了所有字符的最后出现位置,然后遍历中更新字母的最远下标,出现相等就找到了分割点。与上一题弓箭射气球非常相似,只不过这题是统计重叠区间个数。但是太久没做题,完全没思路,看了解答思路后写出来的。然后开始遍历,逐个判断是否字符串拿到了所有该字符。可以先扫一遍用一个列表存储每个字母出现了多少次。这题和前面的挺像,先排序然后遍历并更新边界。

2023-07-25 17:48:08 29

原创 代码随想录第35天 | 贪心算法part4

看解答,发现是和我相反的思路,从大到小排,然后直接按照第二个属性插入即可,因为已经保证了前面有高的人,且人数和属性相等,这个逻辑比我要快不少,不用判断插入第几个,写一下试试。首先一堆人站成一列,然后给了一个数组表示每个人的属性,要根据这个重排此数组中元素的顺序,使其与人群所站的顺序一致。解答中说,没有必要删除气球,只要记下射箭数量即可,巧妙地利用原数组记录了需要更新的右边边界。通过了,不过时间不佳,其实可以直接用数组按顺序存储的,不需要字典//首先找到最矮的人,看它前面有几个人,据此就可以确定他们的位置。

2023-07-11 14:21:14 47

原创 代码随想录第34 | 贪心算法part3

思路很简单,目标是把所有负数替换为正数如果负数个数大于k个,选前k个最小的如果负数个数小于k个,反转所有负数后剩余次数全部用于反转最小的数字(有可能将其最终变为负数)在运算算例时发现忽略了一点,不能直接遍历,而需要先排序,保证从最小的开始反转看了解答,实际上使用了两次贪心思路,第一次有负数时选最小的负数反转,第二次所有都为正数时选最小的正数反转。

2023-07-06 13:19:50 38

原创 代码随想录第31天 | 贪心算法part1、2

无,和我之前的了解一致,基本就是取当前最优的一种思路,逐步得到全局最优。

2023-07-05 21:40:21 47

原创 代码随想录第29天、30天 | 回溯算法part5 part6

不能改变原数组顺序,从头开始遍历,找到一个递增子序列就返回,允许子序列中出现重复的,写完发现回溯时会重复记录结果,使用not in判断去重险些超时不对,重复不是回溯造成的,而是重复元素,若前一个未取,则后面的不能取,即可以允许两个重复元素都取,但是不允许分别取第一个和第二个,应该使用used来辅助判断,修改一下改后解答错误,哪里有问题?哦对了,使用used判断的前提条件是数组要先排序!!!!所以不能使用此逻辑去重了,正确的是要检查本层所有元素,是否使用过,若使用过则不允许再使用耗时降低了两个数量级

2023-07-01 20:57:32 26

原创 代码随想录第28天 | 回溯算法part3

看解答,发现不合法直接就可以break而不用continue,因为不合法只有两种情况,大于255和前置0,再往后找也必然不合法。这题有点变化,返回条件不再是startIndex==len(nums),而是遇到nums中最后一个元素在path中。与上一题区别在于nums中有重复元素了,使用了之前组合题的思路,使用used来跳过重复元素,但是居然没通过?思路与前一题一致,只不过需要注意允许个位数首位为0但不允许两位三位数首位为0。而且收集元素在任何条件下都要收集,终止条件内也要收集。

2023-06-30 22:07:45 26

原创 代码随想录第27天 | 回溯算法part3

需要先对元素排序,是不是可以理解成,排序之后,只对相同元素的第一个向后作允许重复的遍历操作,后面的相同元素就全部跳过?核心有两点,第一对元素数组排序,第二只针对前一个相同元素未使用而直接使用当前元素的跳过,允许使用前一个相同元素再使用当前相同元素。关键在于,判断回文并不放在函数返回判断里,而放在for循环里面,若遇到不是回文子串则直接跳过此次循环,找下一个子串。看了解答发现,此题特点在于没有递归层数限制,只要不超过target,可以一直递归下去。这图很形象,同一支上可以重复数字,但同一层不可以。

2023-06-30 20:05:38 33

原创 代码随想录第25天 | 回溯算法part2

这里for循环执行完毕会自动返回的,没有return也会返回,但是在if下面添加返回条件可以剪枝,避免无效的迭代,测试了一下确实如此。用上一题的思路写了一半发现好像迭代法更直接一些?写个字典,不对,这样还是无法确定迭代层数。看了一下解答,我并没有维护sum,直接在判断中,而且比没有设置返回,为什么可以返回呢?那么不维护sum有影响吗?维护一个sum可以减少求和的运算,降低计算复杂度。遍历的不是数字,因为顺序实际上是确定不变的,遍历的是每个数字对应的字母。

2023-06-30 15:45:59 35

原创 代码随想录第24天

迭代法不能用,无法确定循环层数,需要递归。或者不用startIndex。

2023-06-29 21:14:39 24

原创 代码随想录第23天 | 669修剪二叉搜索树 108将有序数组转换为二叉搜索树 538把二叉搜索树转换为累加树

四种遍历方式一定要会,需要重点掌握递归前中后序,统一风格的前中后迭代法,层序遍历。

2023-06-29 16:28:50 22

原创 代码随想录第21天第三题+代码随想录第22天 | 236 二叉树的最近公共祖先 235 二叉搜索树的最近公共祖先 701二叉搜索树中的插入操作 450 删除二叉搜索树中的节点

不过实际写出来的思路还跟解答的实现思路不太一样,解答是我一开始想到的思路的正确版本,要判断root同时大于pq或同时小于pq的情况,而不是分别比p和比q。这思路有问题,不能根据root的val判断左右子树,这样会在找pq时遍历两遍树,看解答发现压根不需要判断,直接从上往下找第一个值在pq中间的即可。我对情况的分析是没错的,但是key所在节点在前一个节点的左边还是右边,以及key出现在根节点的情况写得太麻烦了。使用上一题的思路,添加了根据root的val判断左右子树,结果无法通过了,为什么?

2023-06-19 21:54:45 37

原创 代码随想录第二十天 | 654 最大二叉树 617 合并二叉树 700 二叉树中的搜索 98 验证二叉搜索树

关键在于,要不断以不为空的二叉树为主树,把另一个加上来,递归访问应该可以。重点在于要始终记录根元素值,使得右边子树所有元素都比他大,左边都比他小。中序遍历下,二叉搜索树是有序序列,可根据此性质从中序遍历是否递增来判断。层序遍历也可以,而且不需要先合并再生成树,直接同时遍历两个树即可。可以用层序遍历合并,再根据合并结果构建二叉树,但是有点麻烦。注意,不能只根据是否有序,因为二叉树中可能有重复元素,这个递归完全是遍历的,没有用到二叉搜索树的性质。递归情况有点多,写的略繁琐,不过通过了。

2023-06-13 16:26:37 25

原创 代码随想录第十八天 | 513 找树左下角的值 112 路经总和 113 路径总和Ⅱ 106 从中序与后序遍历序列构造二叉树 105.从前序与中序遍历序列构造二叉树

甚至只要是函数外面定义的变量,基本都可以在函数内进行访问,但不能修改它的值,尝试修改会在函数内创建一个同名的变量修改,但self属性则可以在类内的所有函数中查看,修改,相当于使用global将其全局化之后的变量。注意,在python中,self的所有属性都可以视作公共变量,在任意函数中都可以定义这样的公共变量,并跨函数使用这些变量。尝试了一下实现了基本功能,可以通过测试算例,但是跑不通,忽略了一种在切割后某个子树为空的情况。先从后序遍历最后一个找到根节点,以此来在中序遍历中区分左右子树,按此逻辑递归即可。

2023-06-12 15:30:05 38

原创 代码随想录第十七天 | 110 平衡二叉树 257 二叉树的所有路径 404 左叶子之和

这个return self.count(node.left) + self.count(node.right) + 1是精髓,而且计算高度时忽略了根节点,是从根节点的左右孩子开始算的,所以计算总节点个数时次幂要加1。其实还是递归的终止条件写的有问题,要确保,无论在任何情况下,递归函数都有一个返回才可以,也即必须得包含所有的可能,如果有情况没考虑到就会出现空返回值。另外,map函数,两个参数,第一个function,第二个迭代器,依次对迭代器中的元素执行函数,返回map类型迭代器。

2023-06-09 13:30:17 31

原创 代码随想录第十六天 | 104 二叉树的最大深度 559 n叉树的最大深度 111 二叉树的最小深度 222 完全二叉树的节点个数

感觉这解答整的花里胡哨的完全没必要啊,还是O(n)遍历的,好像没什么用,并没有降复杂度,但我的思路也并没有实现,因为找深度确实小于O(n),但是在找叶子节点个数时仍然遍历了。再思考一下其他复杂度更低的方式,只要知道这棵完全二叉树的高度和最后一层有几个节点就可以算了,因此可以直接求高度,以及想办法计算所有叶子节点。第二个,实际我已经想到了用某种顺序遍历的结构,写出来的也差不多,但是还没能理解递归的逻辑。但是在寻找叶子节点时遇到了问题,会把倒数第二层的叶子节点也算进去,但是不应该算这个节点。

2023-06-08 22:11:25 22

原创 代码随想录第十五天 | 层序遍历 10道题 226 翻转二叉树 101 对称二叉树2

但是看了解答就是这样写的,为什么会耗时锐减,快了近20倍?之前的遍历法是用的数组先存节点顺序,再从节点取值,如果直接取值应该会快一些,但是缩短耗时最主要的应该还是改用了deque,比列表的append操作快。要注意,python写递归,调用函数需要用self.fun,但是函数的参数是不能填self的,只有在定义函数的时候才需要写self。写一半发现输入不是只有根节点啊,给了整个树的数组,但不是完全二叉树,没法用下标直接访问。解答的思路更好一些,不用储存节点,直接在遍历时就把指针设定好,而且代码写的很简洁。

2023-06-07 16:50:42 30

原创 代码随想录第十四天 | 二叉树理论基础 递归遍历 迭代遍历 统一迭代

关键点是在已经访问过的节点再次入栈后面加一个空元素,相当于一个标记,表示此节点已经访问过,但是还没记录,当遇到标记时记录下一个元素。前序遍历需要放入根节点就立即pop并记录值,然后依次放入右、左节点,每次取出访问的都是中间节点,可以直接放入记录表。实际上,前序遍历在第一次遇到根节点时即记录,中序遍历在第二次遇到根节点时记录,后序遍历在第三次遇到根节点时记录。后续遍历:左右根,入栈顺序,左右,记录顺序,根右左,最后输出要反序。前序遍历:根左右,入栈顺序,右左,记录顺序,根左右。

2023-06-06 14:34:26 37

原创 代码随想录第十三天 | 239 滑动窗口最大值 347.前 K 个高频元素

栈与队列部分的题整体不算难,关键是搞清楚概念,python中可以使用列表来模拟栈或者队列,还可以使用效率更高的deque要知道单调队列和优先队列的概念和如何应用熟悉一些collections中的模块,包括Counter,heapq,defaultdict,deque等。

2023-06-05 15:50:24 20

原创 代码随想录第十一天 | 20 有效的括号 1047 删除字符串中的所有相邻重复项 150 逆波兰表达式求值

题目不难,想到用栈来解决思路很清晰,把左括号都入栈,遇到右括号就pop出一个作对应,若能对应则继续,不能对应则说明字符串括号不对应返回False。并且可以在遇到左括号时直接入栈右括号,然后判断是否相等即可,不需要用ord取ASCII码来判断括号是否对应。解答还给了不使用栈的双指针法,非常巧妙,让慢指针前一个与其相同时回退指针,从而跳过相同的元素。只要了解后缀表达式此题就不难,不过还是忽略了一种字符串中只有一个数字的情况。同样地,使用栈题目不难,不过写完居然耗时很长?看一下解答,栈非常适合做对称匹配类问题。

2023-06-03 15:12:40 27

原创 代码随想录第十天 | 栈与队列理论基础 232 用栈实现队列 225 用队列实现栈

底层使用vector、deque、list容器都可以实现,属于容器适配器,只是对外接口功能统一,默认是deque,deque是一个双端队列,封住一端即可实现栈或者队列。看了解答,发现自己的思路还是不明晰,而且没必要用deque,直接用列表模拟就行啊,列表不就有append和pop方法吗,太傻了。折腾了好久才过,栈和队列太绕了,主要是python没有栈和队列,还得用deque来模拟,而且额外使用了一个变量,不知道对不对。看了解答,实际可以只用一个列表,记录一下size,然后把弹出的元素放到列表末尾即可。

2023-06-02 13:45:17 40

原创 代码随想录第九天 | 28 实现strStr() 459重复的字符串

关于库函数,python写的有点依赖库函数了,感觉应该需要了解各个库函数的原理再使用,还要会分析其时间复杂度有些链表题目是必须用双指针法做的,但很多其他题目使用双指针法往往是为了降低复杂度,在一个for循环内实现两层for循环的功能,从而把O(N^2)降为O(N)

2023-06-01 14:06:58 47 1

原创 代码随想录第八天 | 344 反转字符串 541 反转字符串Ⅱ 剑指offer05替换空格 151 翻转字符串里的单词 剑指offer58-Ⅱ 左旋转字符串

看了解答之后发现是可以使用切片的,但是必须使用s[:],不能直接对s变量赋值,因为这样赋值会创建一个新变量,而s[:]则不会,通过在jupyter notebook使用id()取变量地址可以验证这一点。注意:split函数默认参数即为空格,在不填入参数使用默认参数时,会自动忽略多个连续的空格,全部删掉而不分割,而如果填入参数’ ‘,则会把两个连续空格之间的空字符都分离出来!学习一下reversed函数,参数是一个sequence,包括列表,元组,字符换,range(n)区间等,返回一个逆序序列的迭代器。

2023-05-31 15:51:17 36 1

原创 代码随想录第七天 | 454 四数相加Ⅱ 383 赎金信 15 三数之和 18 四数之和

今天的题目很难,做的十分痛苦,而且也没有搞得特别清楚,还需要继续学习啊。

2023-05-30 21:19:00 44 1

原创 代码随想录第五天| 哈希表 242 有效的字母异位词 349 两个数组的交集 202 快乐数 1 两数之和

defaultdict() 创建一个特殊的字典,key不存在则返回一个默认值,参数为list,str,int等Counter() 函数,统计可迭代对象中各元素重复的次数,需要from collections import Counter,返回一个Counter对象,可以直接dict构建字典,也可以for k,v in Counter 来遍历访问ord() 用于取字符的ASCII码set创建的集合可以用&取交集,用|取并集,用-取差集运算。

2023-05-29 14:46:00 116 1

原创 代码随想录刷题第四天| 力扣24 两两交换链表中的节点 19 删除链表倒数第N个节点 02.07 链表相交 142 环形链表Ⅱ

看了之后发现我的判断思路有问题,不需要先判断是否有环跳出while的,直接在while里面判断是否相遇然后寻找入环节点即可,我写的时候总是想判断slow==fast然后跳出while,结果发现无法和一开始初始化为head的情况区分开。节点相同则必定有数值相同,反之不一定,但可以根据数值相同来作第一步判断,遍历一个链表,若其中有数值在另一个链表中,则进一步判断节点是否相同。具体看了一下解答的代码,还是比我的要简洁,主要是不需要判断哪个链表更长改变变量操作,只要令固定某个变量为长的,操作这个变量即可。

2023-05-27 18:16:21 55 1

原创 代码随想录刷题第三天| 力扣203移除链表元素 707 设计链表 206 反转链表

第二是判断的当前位置和跳出条件,由于我创建了一个虚拟头节点,所以每次判断的是当前指针节点的下一个节点,因此到倒数第二个节点时判断完毕即可跳出。折腾了一下午终于过了,第一道独立完成的中等难度题目,虽然之前也是做过这题(当时没做出来抄了一遍答案),不过还是很开心的!这题主要有两个关键点,第一是要先创建一个节点连接到head,用来作为虚拟头节点,要不然弄丢了头节点就无法返回了。看解答发现需要两个指针,一个cur,一个pre,再试试。看了一下力扣的示例代码,太搞了,直接拿一个列表来糊弄。

2023-05-26 17:13:21 38 1

原创 代码随想录算法训练营第二天| 力扣977 有序数组平方 209 长度最小的子数组 59 螺旋矩阵Ⅱ

关于数组,有一些技巧是需要掌握的:双指针法,滑动窗口法但更重要的是循环不变量原则,因为我感觉我有时候怎么写都报错,逻辑不清一团乱麻就是边界条件找不准,或者是循环的切入角度不对。。

2023-05-25 20:41:06 46 1

空空如也

空空如也

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

TA关注的人

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