【双指针-简单】234. 回文链表(栈、翻转后半链表,递归法后期补充)

回文链表算法解析与面试实战技巧 链表作为基础数据结构,其操作技巧在算法面试中至关重要。回文判断问题结合了快慢指针、链表反转等核心算法思想,是检验编程能力的经典案例。从技术实现来看,通过双指针定位中点配合局部反转,可以在O(1)空间复杂度内解决问题,这种优化思路在大厂面试中经常被考察。实际工程中,类似算法可应用于数据校验、缓存淘汰策略等场景。根据LeetCode统计,该题在亚马逊、字节跳动等企业的出现率超过60%,掌握其多种解法对准备技术面试很有帮助。快慢指针技巧还可延伸解决环形链表检测等衍生问题,是算法学习的关键突破点。 阅读详情

【题目】
请判断一个链表是否为回文链表。
【示例 1】
输入: 1->2
输出: false
【示例 2】
输入: 1->2->2->1
输出: true
【进阶】
你能否用 O(n) 时间复杂度和 O(1) 空间复杂度解决此题?
【代码】
【Python】
【方法1:普通法】
在这里插入图片描述

class Solution:
    def isPalindrome(self, head: ListNode) -> bool:
        num=[]
        while head:
            num.append(head.val)
            head=head.next
        return num==num[::-1]

【方法2:进阶法】
空间复杂度:O(1)
在这里插入图片描述

class Solution:
    def isPalindrome(self, head: ListNode) -> bool:
        if not head or not head.next:
            return True
        cnt=0
        t=head
        while t:
            cnt+=1
            t=t.next
        half1=head
        pos=None
        for i in range(cnt//2):
            pos=head
            head=head.next
        pos.next=None
        if cnt%2:
            head=head.next
        #对后半部分链表逆转
        pre=head
        cur=head.next
        pre.next=None
        while cur:
            post=cur.next
            cur.next=pre
            pre=cur
            cur=post
        while pre and half1:
            if pre.val!=half1.val:
                return False
            pre=pre.next
            half1=half1.next
        return True
递归实现回文判断 立即下载

相关推荐

奇迹mu服务端DATA文件解析:从基础配置到高级玩法

本文深入解析奇迹MU服务端DATA文件的核心配置与高级玩法,涵盖基础设置、怪物AI系统、技能战斗机制、副本事件管理及物品商城定制。通过详细示例和实用技巧,帮助开发者掌握从经验倍率调整到动态事件触发的全方位配置方法,实现个性化的私服搭建与运营。

weixin_29254673的博客 532

回文链表(递归方法)

首先关于链表,有两种常用的实现,分别是数组列表和链表,若想在链表中存储值是如何做到的呢?

m0_66714418的博客 456

编译原理2024期末复习(面向做题,大题速学)【太原理工大学】

归约-归约”冲突就是在项目集规范族一个状态中两个。

m0_63181421的博客 1万+

【刷题之路】LeetCode 234. 回文链表

其实这一步是可有可无的,而我们必须要做的是将后半部分反转后的链表的尾节点的next置空。我们需要额外创建一个全局的指针,在每次递归中,如果本次递归满足前面的节点的val和后面的节点的val相同,就让前面的节点往后走一步。递归的思路其实类似于双指针,先让递归一层层深入,直到走到链表的尾,在通过一层层的返回来模拟指针从后往前走的动作。空间复杂度:O(n),空间复杂度主要取决于递归的最大深度,这里的最大深度就是链表的长度,故空间复杂度为O(n)。所以说,将前半部分的尾置空的操作是可有可无的。

kk702392702的博客 1178

STLink驱动安装全攻略:从卸载到Keil配置的完整避坑指南

本文提供了STLink驱动安装与Keil环境配置的完整避坑指南。详细讲解了从驱动卸载、重装到Keil调试器设置的每一步,并针对常见的设备无法识别、连接不稳定等问题给出了深度解决方案,帮助开发者快速搭建稳定的STM32开发环境。

weixin_29182481的博客 426

R语言实战:非正态数据下的Scheirer–Ray–Hare检验全流程解析

本文详细解析了在R语言中执行Scheirer–Ray–Hare检验的全流程。当数据不满足正态分布假设时,该非参数检验是传统双因素方差分析的有效替代方案。文章从原理、R环境配置、数据准备、代码实现、结果解读到事后比较与可视化,提供了完整的实战指南,帮助研究者稳健地分析多因素实验设计中的主效应和交互效应。

cc789的博客 406

【链表题】——回文链表

如果直接反转整个链表然后与原链表对比的方法,虽然在反转过程中只使用了几个额外的指针变量,但反转后的链表确实占用了与原链表相同的空间。这个问题是因为在比较的时候,没有考虑到原始链表和反转后的链表在比较过程中需要同时移动,而不是只移动一个链表。在这个版本中,只在比较循环中检查反转后的链表是否为空,确保原始链表和反转后的链表同时移动并进行比较。在反转链表过程中,生成了一个与原链表长度相同的反转后的链表,所以空间复杂度为。在这个实现中,反转链表后占用了额外的空间来存储反转后的链表,所以空间复杂度为。

weixin_47868976的博客 1309

别再买模块了!手把手教你用FT232RL-REEL芯片,从零设计一个USB转串口电路板

本文详细介绍了如何使用FT232RL-REEL芯片从零设计USB转串口电路板,涵盖核心器件选型、原理图设计、PCB布局布线及焊接调试等关键步骤。通过实战案例和性能对比,展示自制电路板在成本、性能和可靠性上的优势,特别适合硬件爱好者和工程师参考。

weixin_30561425的博客 434

一道把递归、链表、引用、双指针都结合的题——回文链表

题目描述:给出一个链表,然你判断它是不是回文链表,是则返回true,不是则返回false; 比如1 2 3 5 3 2 1和1 2 3 5 5 3 2 1都是回文链表; 限制条件:控制时间复杂度为O(n)、空间复杂度为O(1); 解题思路: step1:判断是否为回文链表,必然要判断前半部分(顺序)和后半部分(反序)的元素是否全部一致;所以,我们首先要找到链表的中间结点; 这里可能会想到先遍历一遍结点得到长度size,然后再从头遍历size/2的结点即可得到中间结点,这是普通的方法,需要遍历1.5次链表;而

CodeLuweir 的博客 472

4-20mA电流信号转电压

该电路实现4-20mA电流信号转电压(0.44-2.2V)调理功能,采用两级运放设计:第一级LMH6642MFX进行11倍放大,第二级配置为缓冲器加二阶低通滤波。电路包含10Ω采样电阻、多级RC滤波和ESD防护,具有抗干扰强、功耗低(4mW)等特点,适配3.3V系统ADC采集。通过使能控制MOS管可实现节能模式,适用于工业自动化、环境监测等场景。设计合理平衡了信号精度与功耗,输出电压范围留有充足余量避免饱和。

qq_37999850的博客 308

手把手教你学PCIE(10.5)--PCIE故障排除方法的分步排查法介绍

通过以上分步排查法,你可以系统地诊断和解决 PCIe 设备的故障。每个步骤都有助于逐步缩小问题范围,最终找到并解决问题。

MHD0815的博客 1873

234.回文链表-递归

给你一个单链表的头节点 head ,请你判断该链表是否为回文链表。如果是,返回 true ;否则,返回 false 。 示例 1: 输入:head = [1,2,2,1] 输出:true 示例 2: 输入:head = [1,2] 输出:false 提示: 链表中节点数目在范围[1, 105] 内 0 <= Node.val <= 9 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/palindrome-li...

最不正经的计算机专业学生 651

Claude Code、Codex、Gemini CLI、OpenCode 和 OpenClaw 配置管理太麻烦?试试这个统一管理工具

还在为 Claude Code、Codex、Gemini CLI 等 AI CLI 配置烦恼?🤯 这款桌面工具支持五大助手统一管理,一键切换 50+ 服务商,MCP 和 Skills 集中管理 🛠️,跨平台支持,让你的 AI 编程更高效 ⚡

XiaoqiangClub的博客 918

【算法题解】回文链表(力扣234题)四种方法

题目描述:回文链表1. 法一 1. 法一

qq_43751336的博客 393

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

【LeetCode234】回文链表(要就地,不用栈)

1.题目 2.思路 如果不要求O(1)O(1)O(1)空间复杂度,即可以用栈;而按现在的要求,可以将后半链表就行翻转(【LeetCode206】反转链表(迭代or递归)),再将2段 半个链表进行比较判断即可达到O(1)O(1)O(1)的空间复杂度——注意判断比较的是val值,不要误以为比较指针。。 可以举个上面的栗子看看[1,1,2,1],注意fast是指到后面的NULL,而不是第一个位置停住,此时slow2停住的位置是链表的中间位置(偏下半部分,如果结点个数为奇数则是中间节点)。 注意:由于上面栗子操

发现问题,并解决问题,批判性思维 726

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

中判断回文的代码_LeetCode(234. 回文链表) 题解

234. 回文链表题目请判断一个链表是否为回文链表。何为回文?维基百科是这样介绍的:回文,亦称回环,是正读反读都能读通的句子,亦有将文字排列成圆圈者,是一种修辞方式和文字游戏。北宋文学家苏轼创作的一首名为《菩萨蛮·回文夏闺怨》的词,就用到了回文的修辞方式。菩萨蛮·回文夏闺怨苏轼柳庭风静人眠昼。昼眠人静风庭柳。香汗薄衫凉。凉衫薄汗香。手红冰碗藕。藕碗冰红手。郎笑藕丝长。长丝藕笑郎。这首《...

weixin_28952383的博客 179

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

学习日记【LeetCode】234. 回文链表

【LeetCode】234. 回文链表 一、题目内容 请判断一个链表是否为回文链表。 示例 1: 输入: 1->2 输出: false 示例 2: 输入: 1->2->2->1 输出: true 二、考查内容 双指针、递归、栈、链表反向、快慢针 三、解题思路 思路一:将链表复制到一个数组中,然后用双指针判断这是不是回文(稍微改一下就是:将链表压入栈,然后栈顶元素和链表逐一比较) 思路二:利用计算机在执行函数递归的时候其实是在使用栈的特点,使用递归来进行链表的反向遍历。虽然这种方法对于

weixin_45921043的博客 156

labuladong日常刷题-递归魔法 | LeetCode 25K个一组翻转链表 234回文链表 | 双指针 167两数之和-II 输入有序数组

递归魔法操作链表+双指针操作数组

weixin_66706867的博客 823

链表经典问题之回文链表(c++、Java)力扣leetcode234

方案一:栈遍历链表,将链表的每个节点的值存入一个栈中;再次遍历链表,比较链表节点的值和出栈的值是否相等,若有不等的则不是回文链表,否则是回文链表。方案二:快慢指针 + 反转链表使用快慢指针找到链表的中点,将链表分成两个部分;反转链表的后半部分;比较链表的前半部分和反转后的后半部分是否相等,若有不相等的则不是回文链表,否则是回文链表。方案三:递归使用快慢指针找到链表的中点,将链表分成两个部分;递归到链表的尾部,依次向前比较节点的值是否相等,若有不相等的则不是回文链表,否则是回文链表。

染落林间色的博客 1364

Leetcode234_回文链表

1.找到链表的中间节点(使用快慢指针,遍历链表,slow 一次走一步,fast 一次走两步。那么当 fast 到达链表的末尾时,slow 就位于中间位置)给你一个单链表的头节点。,请你判断该链表是否为。空间复杂度解决此题?2.反转后半部分链表。

qq_45800511的博客 696

Leetcode 题解 - 链表-(8)- 回文链表

[LeetCode] 234. Palindrome Linked List 回文链表 Given a singly linked list, determine if it is a palindrome. Example 1: Input: 1->2 Output: false Example 2: Input: 1->2->2->1 Output:...

qq_40320556的博客 174

leetcode 234.回文链表

leetcode 234.回文链表 题干 请判断一个链表是否为回文链表。 示例 1: 输入: 1->2 输出: false 示例 2: 输入: 1->2->2->1 输出: true 进阶: 你能否用 O(n) 时间复杂度和 O(1) 空间复杂度解决此题? 题解 丑陋的读入线性表下标访问 * 没啥好说的 class Solution { public: bool isPalindrome(ListNode* head) { vector<ListNode

玛软的垃圾桶 190

234-回文链表

https://leetcode-cn.com/problems/palindrome-linked-list/ 题目 给你一个单链表的头节点 head ,请你判断该链表是否为回文链表,,所谓的回文链表就是以链表中间为中心点两边对称。如果是,返回 true ;否则,返回 false 。 示例 1: 输入:head = [1,2,2,1] 输出:true 示例 2: 输入:head = [1,2] 输出:false 思路 先反转,在依次遍历比较两个链表的值 自己代码一 class Solution {

qq_40434201的博客 96

LeetCode 热题 100 之 160. 相交链表 206. 反转链表 234. 回文链表 141. 环形链表 142. 环形链表 II

本文总结了几种常见链表问题的解法: 相交链表:双指针法通过交替遍历两链表保证路径长度相等,时间复杂度O(n+m);长度差法先计算链表长度差再同步遍历。 反转链表:迭代法用三指针逐个翻转节点指向;递归法从后往前逐层翻转。 回文链表:快慢指针找中点+反转后半链表比较;或转为数组后用双指针比较。 环形链表检测:快慢指针法通过速度差判断是否相遇;哈希表法记录访问节点。 环形链表入口:快慢指针相遇后,重置慢指针并同速遍历,再次相遇点即为入口。 各解法均给出了代码实现和详细解释,重点突出了双指针技巧在链表问题中的高效应

2401_87662859的博客 401

LeetCode-234-回文链表

为了实现O(1)的时间复杂度,我们必须在原地修改链表,使用额外数组或者递归的形式都不能满足条件。为此我们需要使用快慢指针找到链表的中间位置,而后翻转后半段链表。接着我们依次比较前半段链表和后半段翻转后的链表是否相同即可,最终恢复链表即可。

L.Wzz的博客 194

LeetCode 234. 回文链表

1、题目 请判断一个链表是否为回文链表。 示例 1: 输入: 1->2 输出: false 2、解答 这道题其实要想清楚如何判断是否回文。有两种思路,一种就是从首尾两端一一对比;一种是找到中间位置,然后比较前后两部分。 前后指针法:就是把链表转换成数组,然后比较数组是否回文。 栈空间法:这个也是思路一的实现,只不过借用了栈。 递归法:这个算比较巧妙吧,递归找到链表结尾,然后根据递归的特性,反过来遍历这个链表。 快慢指针法:前面三个是思路一的实现,这种事思路二的实现。维护快慢两个指针,然后找到中间位

whan2012的专栏 133
上一篇: 【双指针】141. 环形链表(三种方法:单指针,双指针,集合哈希)
下一篇: 【二分查找-简单】852. 山脉数组的峰顶索引
菜菜2022
博客等级 码龄9年 67粉丝 1033原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值