自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

gezq0714的博客

Hello,this is gezq0714. He always confirm there is no one is fool and just some lazy people.

  • 博客(137)
  • 收藏
  • 关注

原创 CentOS8出现下载元数据出错

CentOS8出现下载元数据出错更换App和Base的baseurl vim /etc/yum.repo.d/CentOS-Linux-AppStrem.repo #之后写入此行或者下一行(二选一) baseurl=https://mirrors.aliyun.com/centos/$releasever-stream/AppStream/$basearch/os/ baseurl=https://mirrors.aliyun.com/centos/8-stream/A

2022-03-03 20:09:11 576

原创 带你看懂Optional

概述1、JDK8最大的一个亮点就是引入了Optional类来解决NPE(NullPointerException)2、阿里开发手册上也推荐使用Optional类来防止NPE3、综上所述,解决NPE正是Optional类的功能,也是JDK8的一份亮点Optional预览1、Optional类的声明1)被声明为final,即不可被继承2)使用泛型T,即指定Optional所包含对象的类型 public final class Optional<T>2、Opt

2021-10-01 20:55:09 370

原创 SpringBootAdmin中的一步一坑(与SpringSecurity、Nacos的相关配置)

前序SpringBootAdmin的官网上示例介绍,真的让人感觉体验十分糟糕!!!这也是本人第一次接触到这个东西,自己摸索了一上午和半个下午,才终于得出正确做法,故此分享。错误与解决1、Server无法连接Client(出现这种情况一般很少,但是也可能有)请检查Client服务中的配置文件的spring.boot.admin.client.url是否为正确的Server服务的Url地址2、Client无法连接Server!!!(这个遇到的坑绝对是最多的)1)403 Forbidden

2021-09-20 16:03:30 1330

原创 SpringBoot2.5.4版本报错

SpringBoot与EurekaSpringBoot:2.5.4版本Eureka:SpringCloud2020.3版本错误1Eureka-Server出错***************************APPLICATION FAILED TO START***************************Description:An attempt was made to call a method that does not exist. The attempt

2021-09-07 17:23:46 540

原创 求n以内各个位数字之和是偶数的质数

前几天面试时,面试官的最后一个问题就是:5分钟内写出,求1000以内各个位数字之和是偶数的质数package com.gezq.test;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.util.ArrayList;import java.util.List;/** * @author: gezq0714 * @email: ge0

2021-08-24 11:54:59 200

原创 Typora中搭建图床方式

Typora中三种搭建图床方式安装PicGoPicGo的Github地址阿里云OSS获取Bucket与存储路径1、进入阿里云,注册账号并登录2、进入:控制台—>对象存储OSS—>Bucket列表3、创建Bucket,如下获取OSS访问权限1、移动到个人账号,选择访问控制2、进入RAM访问控制,选择用户—>创建用户3、一定要选择“Open API调用访问”4、复制记录下对应的AccessKey ID和AccessKey Secr

2021-08-18 20:23:19 594

原创 Sword68-II——二叉树的最近公共祖先

Sword68-II——二叉树的最近公共祖先方法1——递归思路:此题是对上一题的演化,迭代方法肯定不再适用,因为此时无法判断左右子节点大小。因此使用的便是递归对于当前节点,将会有以下情况1、left与right均为空,此时p、q不存在于当前节点的左右子树中(当前节点为叶子节点),此时返回null2、left与right均非空,此时p、q存在于当前节点的左右子树中,且二者处于异侧,此时返回当前节点为最近公共祖先3、left与right其中一个为空,另一个非空,p、q中的一个或两个都存在一侧子

2021-08-11 09:47:09 143

原创 Sword68-I——二叉搜索树的最近公共祖先

Sword68-I——二叉搜索树的最近公共祖先方法1——迭代思路:利用好二叉搜索树的性质,即左子树元素均比根节点小,右子树元素均比根节点大,这就可以找出此次终止条件从根节点进行比较,分为以下几种情况当前节点值比p、q都要大,则p、q存在于当前节点的左子树中当前节点值比p、q都要小,则p、q存在于当前节点的右子树中当前节点值比p、q中一方要大,比另一方要小;或者p、q自身为当前节点,即证明当前节点为p、q的最近公共祖先特殊情况与临界分析:无终止条件:无步骤:while循环

2021-08-11 09:05:33 130

原创 Sword67——把字符串转换成整数

Sword67——把字符串转换成整数方法1——越界处理思路:针对题目中的相关条件进行依次分析首先需要去除空格,之后再判断数组长度是否为0,为0即可直接返回0搜索判断是否存在符号位,正号使用1记录,负号使用-1记录依次判断后续字符对应可转换成的数字,并将结果相加即可特殊情况与临界分析:数组去除空格后,长度是否将会为零终止条件:无步骤:去除字符串前后空格,并将其转换为字符数组数组长度为0校验定义结果、边界值定义起始值和符号位标记(默认为正号)判断此时第一个字符是否为负号,为就

2021-08-11 08:45:47 110

原创 Sword66——构建乘积数组

Sword66——构建乘积数组方法1——表格分区思路:因为题目的特殊条件不能使用除法,因此只能相当于使用乘法观察B[i]等于A[0] * A[1] * … * A[i - 1] * A[i + 1] * … * A[n - 1]即为第i个计算(去除第i项)的乘积当第一个去除第0项,第二个去除第1项,将每个计算项放在一起因此便很容易联想到矩阵,上述即为矩阵中第i行去除第i项(即主对角线元素)的乘积因此只需要构造出对应的矩阵,并将主对角线元素均置为1即可特殊情况与临界分析:数组长度校验

2021-08-11 08:07:40 159

原创 Sword65——不用加减乘除做加法

Sword65——不用加减乘除做加法方法1——位运算思路:题目中又是规定不能使用加减乘除,因此又得另辟蹊跷。相加涉及到的便是位运算,一般是不可能直接使用与、或的,唯一可能便是将目光投向异或对于两个数a、b,两数之和sum = a + b,这是无可非议的转换为异或操作,a与b异或,即等价于a与b无进位相加无进位相加数,相比于sum,此时缺少的便是只进位相加数,那么可以使用哪种方式呢?(a & b) << 1即为只进位相加只需要使得只进位相加数不再进位,此时无进位相加数即为最

2021-08-11 07:39:01 117

原创 Sword64——求1+2+…+n

Sword64——求1+2+…+n方法1——短路运算符思路:因为题目中的特殊条件,导致无法做判断,而回想起来,只有短路运算符,能够作为终止条件退出,此题采用做法为不断递归,只需要一侧短路即可退出终止条件特殊情况与临界分析:无终止条件:无步骤:从n向下到1递归,短路与运算符终止条件:当n为1时,即短路与起作用,由n加上返回值而向上返回返回n public int sumNums(int n) { // n为1时,左侧短路 boolean

2021-08-10 21:40:37 98

原创 Sword63——股票的最大利润

Sword63——股票的最大利润方法1——动态规划思路:只需要不断找出最小值和最大值,最小值当天买入,最大值当天卖出,即可获取最大收益特殊情况与临界分析:无终止条件:无步骤:定义最小成本、最大收益foreach循环寻找最小成本和最大收益返回最大收益 public int maxProfit(int[] prices) { // 定义最小成本、最大收益 int minPrice = Integer.MAX_VALUE, maxProfit =

2021-08-10 21:30:53 138

原创 Sword62——圆圈中最后剩下的数字

Sword62——圆圈中最后剩下的数字方法1——动态规划思路:本质即为环形约瑟夫问题每一次删除的第m个元素(即下标为m - 1的元素),下次起始位置的下标即为m(为防止n < m,因此为m % n)上一轮n中(m % n) + x下标的元素,即在下一轮n - 1中为x下标的元素(因为m%n为第1位,而长度由n变为n - 1,因此得出此结论)由上述可得,若在n - 1中留下的数字下标为x,则在n中留下的数字下标为x + m % n,即f(n) = f(n - 1) + m % n(因为其为

2021-08-10 15:30:26 96

原创 Sword61——扑克牌中的顺子

Sword61——扑克牌中的顺子方法1——哈希表/排序思路:首先需要使用到哈希表判断这五张牌是否有重复元素,其次则需要判断其中最大最小值之差只能小于5,若这两个条件均满足,则证明五张牌必定构成顺子注意点:大小王代表任意数,并不用刻意判断是否存在特殊情况与临界分析:无终止条件:遍历完成时,五张牌的最大最小值之差是否小于5步骤:定义Set保存出现过的数字定义数字的最大值为0,最小值为14,因为扑克牌的范围为0~13(0不管,实际相当于1~13)foreach循环遍历数组当遇到大小

2021-08-10 14:24:13 160

原创 Sword60——n个骰子的点数

Sword60——n个骰子的点数注:五颗星困难模式,不喜勿入方法1——动态规划思路:出现n个东西怎么样的,一般都是动态规划,即从初始状态通过转移方程到第n个状态特殊情况与临界分析:无终止条件:当到达n状态时步骤:定义dp数组保存当前状态初始状态:当n为1时,每个面出现概率为1/6for循环——确定当前骰子个数参数:i从第2个骰子开始,一直到最后n个骰子定义临时数组,保存下一状态,即i个骰子可能出现的点数情况1个骰子到2个骰子:情况从6变成112个骰子到3个骰子:情况从11变

2021-08-10 14:06:56 135

原创 Sword59-II——队列的最大值

Sword59-II——队列的最大值方法1——普通队列和双端队列思路:使用普通队列保存基本元素,双端队列来保存队列的最大值特殊情况与临界分析:无终止条件:无步骤:定义两个队列,Queue和Deque初始化两个队列取最大值方法双端队列非空,直接返回双端队列的队头元素双端队列为空,返回-1插入元素时双端队列是否非空,且当前元素是否比双端队列的队尾元素要大将满足此条件的元素一直出队向普通队列添加元素,向双端队列尾部添加元素删除元素时判断普通队列是否为空,为空

2021-08-10 10:42:24 108

原创 Sword59-I——滑动窗口的最大值

Sword59-I——滑动窗口的最大值方法1——双端队列思路:使用双端队列保存滑动窗口元素,res保存窗口最大值滑动窗口还未形成,或者双端队列中只有一个元素,直接将元素加入当双端队列最后一个元素小于当前j位置的元素,移除双端队列最后一个元素特殊情况与临界分析:无终止条件:无步骤:定义res数组,保存滑动窗口所形成的最大结果,其中结果个数为nums.length - k + 1数组长度非零校验定义双端队列,保证其中元素顺序为递减for循环(滑动窗口不断向右移动)参数:左边

2021-08-10 10:20:20 122

原创 Sword58-II——左旋转字符串

Sword58-II——左旋转字符串方法1——截取拼接思路:直接截取后半部分(n到s.length()),前半部分(0到n),然后进行拼接即可特殊情况与临界分析:无终止条件:无步骤:截取后半部分,前半部分,之后进行拼接即可 public String reverseLeftWords(String s, int n) { // 截取后半部分,前半部分,之后进行拼接即可 return s.substring(n, s.length()) + s.subst

2021-08-10 07:27:24 119

原创 Sword58-I——翻转单词顺序

Sword58-I——翻转单词顺序方法1——双指针思路:使用双指针,因为其为翻转,所以从后往前遍历,每遇到一个空格,即证明此时为一个单词,将其进行拼接,之后找到前一个单词,再次拼接特殊情况与临界分析:无终止条件:无步骤:删除字符串前后空格,防止影响遍历定义双指针,从后往前定义StringBuilder用于拼接while循环循环条件:left未越界,即大于等于0时while循环,当left未越界且left处不为空格,一直向左递减退出while循环,证明此时left为空格,截取(l

2021-08-10 07:26:25 171

原创 Sword57-II——和为s的连续正数序列

Sword57-II——和为s的连续正数序列方法1——滑动窗口思路:因为输出结果并不是固定两个元素组成,因此很容易联想到滑动窗口,根据结果可以由左右边界进行滑动得出特殊情况与临界分析:无终止条件:无步骤:定义滑动窗口的左右边界(因为要为正整数,所以左边界从1开始,右边界从2开始)、滑动窗口中的总和(因此总和从3开始)定义存放所有结果的Listwhile循环循环条件:左边界小于右边界当滑动窗口总和等于目标值获取此时的长度,即左右指针之间的元素个数定义一个指定长度的数组,用于存储

2021-08-10 07:26:14 132

原创 Sword57-I——和为s的两个数字

Sword57-I——和为s的两个数字方法1——哈希表思路:看到这个题目,是不是立马想起了力扣第一题?没错,确实可以采用这种方法。特殊情况与临界分析:无终止条件:无步骤:定义Mapfor循环参数:i从0开始,i小于数组的长度计算当前数与目标数字的差值判断其差值是否存在Map中如果存在,返回二者的值即可将其值作为K,其下标作为V,存入Map如果不存在,则返回空数组 public int[] twoSum(int[] nums, int target) {

2021-08-09 16:09:50 101

原创 Sword56-II——数组中数字出现的次数 II

Sword56-II——数组中数字出现的次数 II注:五颗星困难模式,不喜勿入方法1——有限状态交换机思路:二进制形式中,对于出现三次的数字,其对于1上的数一定可以被3整除,即为3的倍数,因此只需要其最后结果的每一位上都对3求余,最后剩下的各个位上为1的数字即为最后结果因为任何数字对3取余的余数有3种(0、1、2),因此所有数字的二进制上1的个数状态只可能有3种对于二进制该位上输入的情况若输入二进制中该位为0,则状态保持不变若输入二进制中该位为1,则状态变化有三种情况0 ->

2021-08-09 15:44:19 90

原创 Sword56-I——数组中数字出现的次数

Sword56-I——数组中数字出现的次数方法1——位运算思路:利用异或性质,将数组中所有元素异或一遍,得到的res即为两个出现一次的数字乘积再利用res & (~res + 1)找出最低位上的1重新遍历数组将所有该位上包含1的数字再次异或,得到的结果即为其中出现一次的数字将当前结果与之前的结果进行异或得出另一个数字特殊情况与临界分析:无终止条件:无步骤:定义两个结果值foreach循环将数组中元素进行异或,得出一个结果利用n & (~n + 1)找出n最低

2021-08-09 12:01:02 86

原创 Sword55-II——平衡二叉树

Sword55-II——平衡二叉树方法1——前序遍历思路:对于每一个节点,判断其左右子树的最大深度的绝对值小于等于1,即代表符合条件;继续对该节点的左子节点和右子节点进行递归即可特殊情况与临界分析:根节点非空判断终止条件:当前节点为空,深度返回0步骤:根节点非空判断返回是否符合条件当前节点的左子树深度和右子树深度的绝对值是否小于2其左子节点是否符合条件其右子节点是否符合条件递归求深度方法(可参考上一题的方法)终止条件:当前节点为空,深度为0递归求解左右子树深度,等于左右

2021-08-09 11:36:09 78

原创 Sword55-I——二叉树的深度

Sword55-I——二叉树的深度方法1——DFS思路:当前树的深度等于(左右子树深度的最大值)加1特殊情况与临界分析:根节点非空判断终止条件:当前节点为空,证明已到叶子节点步骤:终止条件:根节点非空判断递归求解左右子树深度 public int maxDepth(TreeNode root) { // 根节点非空判断 if (root == null) { return 0; } //

2021-08-09 10:50:10 87

原创 Sword54——二叉搜索树的第k大节点

Sword54——二叉搜索树的第k大节点方法1——中序遍历倒序思路:第K大节点即为有序,因此联想到中序遍历,又因为中序遍历结果为从小到大,因此将中序遍历倒序,寻找第K个节点即可。中序遍历的倒序中(右-根-左),每当遍历到一个元素,将K减1,当其归零时,证明当前节点为第K大节点特殊情况与临界分析:无终止条件:K归零时返回步骤:定义全局结果值、全局k初始化k开启递归返回结果递归方法参数:当前节点终止条件:当前节点为空对右子树递归判断k此时是否已归零满足则直接向上返回判

2021-08-09 10:23:14 93

原创 Sword53-II——0~n-1中缺失的数字

Sword53-II——0~n-1中缺失的数字方法1——二分法思路:有序数组中查找数字,即二分法。当mid元素恰好与mid下标相等,证明其左侧元素是完整的,即无缺失,因此继续向右半区进行查找;当不等时,即说明左半区缺失,向左半区查找特殊情况与临界分析:无终止条件:左指针大于右指针步骤:定义左右指针while循环循环条件:左指针小于等于右指针定义mid下标判断mid对于元素是否与mid下标相等相等即证明其左侧是完整的,即向右查找left = mid + 1不相等即证明左侧发生缺

2021-08-09 10:02:05 73

原创 Sword53-I——在排序数组中查找数字 I

Sword53-I——在排序数组中查找数字 I方法1——二分法思路:查找某个数字,第一反应就是二分法,二分法对应为有序数组,也符合条件,因此使用二分法特殊情况与临界分析:无终止条件:无步骤:返回目标值右边界减去前一元素的右边界的差值查找方法参数:原数组,目标值定义左右边界while循环循环条件:left小于等于right时定义中间节点当mid元素小于等于目标值向右半部分查找,即left为mid + 1否则即mid元素大于目标值向左半部分查找,即right为mi

2021-08-09 09:11:22 94

原创 Sword52——两个链表的第一个公共节点

Sword52——两个链表的第一个公共节点方法1——双指针思路:使用两个指针分别从两个链表头节点同时移动,到达末尾时从另一个链表头节点开始移动,两个指针相遇的节点即为第一个公共节点特殊情况与临界分析:无终止条件:两指针相遇步骤:定义两个指针,分别从两链表头节点开始while循环循环条件:两指针未相遇指针A是否为空非空则后移为空则从第二链表头节点开始指针B是否为空非空则后移为空则从第一链表头节点开始返回A或B当前节点即可 public List

2021-08-09 08:52:15 78

原创 Sword51——数组中的逆序对

Sword51——数组中的逆序对方法1——归并排序思路:归并排序思想,将数组进行划分为左右子数组,并且保证子数组其中是有序的假设只剩下最后两组元素left和right时,当left[i]大于right[j]时,又因为left为有序的,因此left数组后续元素都将大于right[j],将其填入nums原数组,并统计新增的逆序对个数此处并没有真正将数组划分左右子数组,只是使用一个tmp进行存储,再定义左右子数组的首个元素的起始坐标,以达到划分的目的特殊情况与临界分析:无终止条件:无步骤:

2021-08-09 08:33:54 117

原创 Sword50——第一个只出现一次的字符

Sword50——第一个只出现一次的字符方法1——有序哈希表思路:遍历数组,将所有字符存入哈希表中。其中K为字符,V为其是否只出现一次(只出现一次即为true, 其它情况均为false),因为其为有序哈希表,将会找到第一个非重复的字符,可降低遍历哈希表的时间特殊情况与临界分析:无,s为length的字符串将会返回空字符终止条件:无步骤:存放元素的LinkedHashMap,此时默认按照插入顺序访问将字符串转换为字符数组foreach循环将字符数组以单个Key存入Mapforeach遍历

2021-08-08 16:03:22 67

原创 Sword49——丑数

Sword49——丑数方法1——动态规划思路:数字递推的问题一般优先选择动态规划进行解决。只需要使用三个指针分别记录2、3、5的倍数,在三者中选取最小的数即为当前的丑数,之后分别将对应指针后移一位即可特殊情况与临界分析:无终止条件:无步骤:定义dp数组设置三个质因子(2、3、5)指针初始化第一个丑数为1for循环参数:i从1开始,i小于n分别计算出三个指针对应的倍数从三者中选取出最小值,设置到dp数组第i个元素中当丑数与对应三个数中的数相等,则移动对应指针返回第n个丑数

2021-08-08 15:49:06 80

原创 Sword48——最长不含重复字符的子字符串

Sword48——最长不含重复字符的子字符串方法1——动态规划+哈希表思路:使用Map记录已出现字符的最新下标,当再次遍历到相同字符时,计算其无重复字符子串的长度即可特殊情况与临界分析:无终止条件:遍历到最后一个字符完成操作步骤:将字符串转换为字符数组定义Map存储字符及其对应下标定义结果值、临时值for循环参数:i从0开始,i小于字符数组长度判断当前字符是否在Map中出现过,出现获取其下标,未出现获取为-1将当前字符及其下标加入Map,即更新哈希表获取此时以当前字符结尾的最

2021-08-08 15:34:05 93

原创 Sword47——礼物的最大价值

Sword47——礼物的最大价值方法1——动态规划思路:每个单元格只能从左边或上面移动到此处,因此从左上角遍历,将每个单元格可取得的最大礼物价值直接存入矩阵即可特殊情况与临界分析:见于步骤中终止条件:到达矩阵右下角步骤:获取矩阵的行列数双重for循环遍历矩阵特殊情况:当i、j均为0时,证明为第一格,直接continue跳过当i为0时证明为第一行,只能从左侧移动当j为0时证明为第一列,只能从上面移动当以上特殊情况都不满足,比较左侧和上面两个单元格,选择较大值加上自身值存入单

2021-08-08 12:19:23 121

原创 Sword46——把数组排成最小的数

Sword46——把数组排成最小的数方法1——动态规划思路:对于两位的数字,如果处于10~25之间,则可以有两种做法,如果小于10,只能有一种做法特殊情况与临界分析:无终止条件:遍历到最后一个数字,即为退出步骤:使用字符串,便于截取定义初始状态for循环参数:从2开始、i小于等于字符串长度从String中截取两位的字符串判断其是否位于10~25之间是,即f(n) = f(n - 1) + f(n - 2)否,即f(n) = f(n - 1)更新状态返回最后结果

2021-08-08 12:02:43 81

原创 Sword45——把数组排成最小的数

Sword45——把数组排成最小的数方法1——自定义排序思路:自定义比较器接口,完成数字的排序,之后进行排序即可。自定义的排序规则为:两个数字,x拼接上y的数字、y拼接上x的数字选取结果尽量小的数字放在前面前者比后者小,则为x小于y后者比前者小,则为x大于y特殊情况与临界分析:无终止条件:无步骤:将int数组转换为String数组,便于使用append拼接for循环完成数组赋值调用Arrays工具类中的sort方法,对字符串数组排序,其中传入自定义比较器定义Stri

2021-08-08 11:06:07 94

原创 Sword44——数字序列中某一位的数字

Sword44——数字序列中某一位的数字方法1——迭代取余求整思路:明确思路,主要分为三步骤首先需要找到n是处于几位数中接着找到n处于几位数的哪位数中之后找到n处于哪位树的哪一位中特殊情况与临界分析:无终止条件:无步骤:定义当前位数,从个位数1开始定义当前位数对应的起始位、当前位数的所有数字个数所占的位数,防溢出使用long类型循环条件:n大于当前位数的所有数字个数while循环n减去当前位数的所有数字个数所占位数对应位数加1对应位数起始位置乘以10对应位

2021-08-08 10:49:12 92

原创 Sword43——1~n 整数中 1 出现的次数

Sword43——1~n 整数中 1 出现的次数方法1——按位计算1的个数思路:计算输入数字的每个位上可能出现1的次数,依次累加即可(确实大概意思就是如此。。具体看看举例吧)主要根据cur位的不同可得当前位中的不同结果(cur为0、cur为1、cur为其它数)以2304求其十位上的1为例高位high为23、当前位cur为0、低位low为4、当前位数digit为10其十位上可能出现1的个数:首先需要明确的是:对每100(从1到99)中的数字求解,其十位上1可能出现的位置,只可能在10~1

2021-08-08 10:13:18 78

原创 Sword42——连续子数组的最大和

Sword42——连续子数组的最大和方法1——动态规划思路:只需要求出一个元素的数组的中最大和,之后加上一个元素构成的数组,判断前面的最大和加上该元素是否大于之前的最大和,是就替换,否就继续保存之前的最大和,以此类推即可特殊情况与临界分析:无,因为arr的长度大于1,因此跳过数组非空校验和长度校验终止条件:到达数组末尾时步骤:确定状态:数组的最后一位元素保存当前长度数组的连续子数组的最大和转移方程:当前数组的连续子数组最大和 = Math.max(前一数组的连续子数组最大和,前一数组的连续

2021-08-08 10:12:58 90

空空如也

空空如也

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

TA关注的人

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