Perl 前缀树实现(2)

perl 实现二叉树,二叉平衡树  #! /usr/bin/perl -wuse strict;use warnings;use Data::Dumper;my $head = undef;my $copy = /$head;foreach my $index( 1 .. 10 ){  &AVLTree_insert($copy, $index);}#&create_BSTree( $copy );#&create_tre 阅读详情

在前一篇 Perl 前缀树实现 中用hash table的方法实现了前缀树,算法导论中用数组来实现,方法基本相同,下边用链表的方法来实现,遍历算法可以用到其他树结构遍历。

代码:

use Data::Dumper;

# 默认只支持字符串的输入
sub trie_tree{
    my $root = {
        char=>undef,
        next=>undef,
        child=>undef,
        count=>0,
    };

    for(@_){
        insert($root, $_);
    }
    return $root;
}

# 方便起见,每次只处理一个连续字符串
sub insert{
    my ($tree,$str) = @_;
    # 不包含字符串情况下返回
    if($str !~ /^[a-zA-Z]+$/){
        return;
    }
    else{
        # 所有节点都存小写字符
        my @tmp = split //,lc $str;

        my $root = $tree;
        for(@tmp){
            # 子节点为空或者第一个子节点字符大于插入字符
            if(! $root->{child} || $root->{child}->{char} gt $_){
                $root->{child} = {
                    char=>$_,
                    next=>$root->{child},
                    child=>undef,
                    count=>0,
                };
                $root = $root->{child};
            }
            else{
                $root = $root->{child};

                while($root->{char} ne $_){
                    if($root->{next} && $root->{next}->{char} le $_){
                        $root = $root->{next};
                    }
                    else{ last; }
                }

                if($root->{char} ne $_){
                    $root->{next} = {
                        char=>$_,
                        next=>$root->{next},
                        child=>undef,
                        count=>0,
                    };
                    $root = $root->{next};
                }                   
            }
        }
        $root->{count}++;
    }
}

# 返回值
# undef 完整字符串未出现
# 0 查找字符串作为前缀字符串出现
# N 字符串出现N次
sub search{
    my ($tree,$str) = @_;

    if($str !~ /^[a-zA-Z]+$/){
        return;
    }
    else{
        my @tmp = split //,lc $str;

        my $root = $tree;
        for(@tmp){
            if(! $root->{child}){
                return;
            }
            else{
                $root = $root->{child};

                while($root->{char} ne $_){
                    if($root->{next}){
                        $root = $root->{next};
                    }
                    else{ last; }
                }

                if($root->{char} ne $_){
                    return
                }                   
            }
        }
        return $root->{count};
    }
}

sub travel{
    my ($tree) = @_;

    if(!$tree->{child}){
        return
    }
    else{
        my @node = ($tree->{child});

        while(@node){
            if($node[-1]->{count} > 0){
                print join '', map {$_->{char}} @node;
                print ' => ',$node[-1]->{count},"\n";
            }
            while($node[-1]->{child}){                   
                push @node, $node[-1]->{child};
                if($node[-1]->{count} > 0){
                    print join '', map {$_->{char}} @node;
                    print ' => ',$node[-1]->{count},"\n";
                }
            }

            while(@node){
                my $t = pop @node;
                if($t->{next}){
                    push @node, $t->{next};
                    last;
                }
            }
        }
    }
}

my $tree = trie_tree(qw(this is just a testing));
insert($tree,'and');
insert($tree,'testing');
travel($tree);

做如下测试,插入40W长度为10的字串,观察所用内存及时间,明显可以看到这个版本所占用的内存更多而且时间更长。当然,由于使用了更多的hash table来表示每个单独的节点,会占用更多的内存,如果使用C来实现的话,相信内存使用不到Perl的1/10。

my $tree = trie_tree(qw(this is just a testing));
for(0..400000){
    my $tmp = join '', map { chr ((int rand(26)) + ord('a')) } 1..rand(10);
    insert($tree, $tmp);
}

2 Perl - 数字标量 所有数字内部的格式一致 整数 浮点数 非十进制整数 数字操作符 阅读详情

相关推荐

CodeWarrior IDE脚本自动化:VBS与Perl实现嵌入式项目高效构建

在嵌入式软件开发领域,自动化构建与持续集成是提升工程效率和项目可靠性的核心技术。其核心原理在于通过脚本或工具替代人工操作,实现编译、链接、测试等流程的标准化与可重复执行。这项技术的核心价值在于减少人为错误、加速迭代周期,并确保不同环境下构建结果的一致性,尤其适用于需要维护多配置、多平台的嵌入式固件项目。典型的应用场景包括夜间自动构建、版本发布流水线以及代码提交后的自动化验证。本文聚焦于经典嵌入式开发环境CodeWarrior IDE,深入探讨如何利用其内置的COM自动化接口和Perl插件机制,通过VBScr

weixin_33866037的博客 389

Perl 前缀树实现

前缀树,用来处理大量字符串的查找、排序,也称为字典树,可以代替hash table。 http://en.wikipedia.org/wiki/Trie 以下翻译自Wikipedia: The following are the main advantages of tries over binary search trees (BSTs): Looking up keys

USTBHacker的专栏 2773

模糊综合评价模型

一.引子 1.数学归纳法:同高中知识 2.秃子悖论:秃子悖论 这俩个例子都是类似于“量变引起质变”的道理,而在数学中我们把这类问题的性质叫做“模糊性”,在生活中我们也经常能遇到一些模糊的概念,比如年轻、帅、很少很多… 二.概述 模糊综合评价法是一种基于模糊数学的综合评价方法。该综合评价法根据模糊数学的隶属度理论把定性评价转化为定量评价,即用模糊数学对受到多种因素制约的事物或对象做出一个总体的评价。它具有结果清晰,系统性强的特点,能较好地解决模糊的、难以量化的问题,适合各种非确定性问题的解决。——来自百度百

The__Tyche的博客 2万+

perl的建树算法

=pod=item  @result=();  $ldap_root="NTA::ou1";  push @result,"NTA::ou1::ou2::ou3";  push @result,"NTA::ou1::ou2::ou4";  push @result,"NTA::ou1::ou5::ou6";  push @result,"NTA::ou1::ou5::ou6::o8";  

RobinKin的专栏 1330

手把手教你用BQ Studio给BQ40Z50电量计“做体检”:从Golden Learning到精度验证的全流程实操

本文详细介绍了如何使用BQ Studio对BQ40Z50电量计进行全流程调试,从Golden Learning到精度验证。通过硬件连接、参数配置和优化技巧,帮助工程师提升电池管理系统的精度和性能,适用于BMS开发和电量计校准的实际应用场景。

weixin_30824599的博客 450

常用本体建模工具

常用本体建模工具: Apollo、OntoStudio、TopBraid Composer、Semantic Turkey、Knoodl、Chimaera、OliEd、WebODE、Kmgen和DOME Protégé Protégé[1]是一款由斯坦福大学编写并维护的开源本体建模和编辑工具,其支持Web版本和PC版本,使用OWL语言(关于OWL的详细介绍可参看前文2.1节内容)对知识进行表示,读者可以通过Protégé的官方网站访问Web版本或下载桌面版本。Protégé最早开发于1987年,最初目的是

qq_40503347的博客 6162

perl详解

第一章 概述 一、Perl是什么?       Perl是Practical Extraction and Report Language的缩写,它是由Larry Wall设计的,并由他不断更新和维护,用于在UNIX环境下编程。       .Perl具有高级语言(如C)的强大能力和灵活性。事实上,你将看到,它的许多特性是从C语言中借用来的。       .与脚本语言一样,Perl不需

彦彦专栏 6198

保姆级教程:在RK3588开发板上编译带MPP硬件加速的FFmpeg(含完整依赖库配置)

本文提供在RK3588开发板上编译支持MPP硬件加速的FFmpeg的详细教程,涵盖交叉编译环境搭建、MPP框架及依赖库配置,最终实现4K视频硬件编解码性能优化。通过实战步骤和性能对比,展示如何充分发挥RK3588的硬件加速能力。

weixin_30839881的博客 418

perl统一修改文件前缀并排序

如题,perl统一修改文件前缀并排序。举例说明,修改*.txt文件,并排序。

落雨无风的博客 400

ADS SerDes仿真实战:深入解析Tx_Diff均衡器(EQ)参数对眼图质量的影响

本文以ADS仿真平台为基础,深入解析了SerDes设计中Tx_Diff均衡器(EQ)参数对信号完整性的核心影响。通过实战演示,详细对比了去加重(De-emphasis)与FIR抽头系数两种调节模式,揭示了它们如何有效对抗信道损耗与码间干扰,从而显著改善眼图的高度、宽度与抖动性能,为高速串行链路设计提供关键调优思路。

weixin_29230901的博客 225

OpenRadar Matlab版:毫米波雷达信号处理全流程开源库详解

毫米波雷达数据解析与信号处理是感知领域的基础能力。本文介绍毫米波雷达从ADC原始采样到距离-多普勒(Range-Doppler)热图、CFAR检测、DOA估计直至点云与生命体征参数提取的完整处理链路,并深入讲解OpenRadar(Matlab版)开源库的内核设计、核心API与实测经验。从原理上看,距离FFT与多普勒FFT构成RD谱,CFAR自适应阈值实现目标检测,相位解缠与滤波用于呼吸心跳提取。技术价值在于将繁琐的雷达数据读取、矩阵变换和算法流程标准化,免去重复造轮子。可应用于人员存在感知、生命体征监护、4

weixin_33806859的博客 321

Perl 变量

Perl变量根据数据类型使用不同前缀符号:标量变量($)存储单个值,数组变量(@)存储有序列表,哈希变量(%)存储键值对。变量使用my声明局部作用域,our声明全局变量。命名规则要求字母开头,区分大小写。Perl是动态类型语言,变量无需显式声明类型。特殊变量如$_(默认变量)、@_(子程序参数)和$!(错误信息)具有特定功能。推荐使用use strict强制变量声明,避免未定义变量等问题。复杂数据结构需通过引用实现。

m0_57545130的博客 700

ESP32之 ESP-IDF + Clion 开发环境搭建(二)—— Linux版

本文介绍了 Linux 下,使用Clion IDE 用官方 ESP-IDF 开发包进行 ESP32 开发的环境搭建

Augtons 的博客 6097

perl语言总结2

1.Perl 中所有变量都是全局的;也就是说,这些变量可以在程序的任意部分使用2.函数调用&chomp;如果编译器在调用之前知道此子程序的定义,或者 Perl 从语法中能知道这是一个子程序调用,则子程序前的符号&是可以省略的3.4.printf ?Hello, %s; your password expires in %d days!/n?,$user, $days_to_die;5.文件句柄(f

427

深入傅里叶级数与傅里叶变换:从基础到应用

傅里叶分析为我们提供了一种理解信号频率结构的强大工具。从傅里叶级数到傅里叶变换,再到快速傅里叶变换(FFT),其理论与应用紧密结合,对现代科学技术的发展意义非凡。如果你对信号处理、数据分析或工程计算感兴趣,傅里叶分析是必须掌握的基础工具。希望本文能帮助你对傅里叶分析有更深入的理解!如果有问题或想法,欢迎在评论区讨论!

qq_56683019的博客 3519

深度学习工具包 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")

在每行的开头添加前缀字符串

I have a file as below: 我有一个文件如下: line1 line2 line3 And I want to get: 我想得到: prefixline1 prefix

CHCH998的博客 1072

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

perl 将hash的键列表赋值给数组_深入理解Perl的变量

Perl变量是一个引用对于下面的变量赋值代码,这表示将内存中的字符串数据"junmajinlong"保存到变量name中去。my$name="junmajinlong";注意,「这里的变量名是name,而不是,前缀符号具有特殊意义」。不仅如此,数组变量的前缀@、hash变量的前缀%也一样如此。这些前缀的意义将在后文详细解释。#下面两个变量的变量名分别为names和person,而...

weixin_35656580的博客 1272

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

浅谈 trie树 及其实现

定义:又称字典树,单词查找树或者前缀树,是一种用于快速检索的多叉树结构, 如英文字母的字典树是一个26叉树,数字的字典树是一个10叉树。 核心思想:是空间换时间.利用字符串的公共前缀来降低查询时间的开销以达到提高效率的目的。 三个基本性质: 1. 根结点不包含字符,除根结点外每一个结点都只包含一个字符。 2. 从根结点到某一结点,路径上经过的字符连接起来,为该结点对应

happy_lcj 1290

Perl 特殊变量

Perl 语言中定义了一些特殊的变量,通常以 $, @, 或 % 作为前缀,例如:$_。很多特殊的变量有一个很长的英文名,操作系统变量 $!可以写为 $OS_ERROR。如果你想使用英文名的特殊变量需要在程序头部添加。这样就可以使用具有描述性的英文特殊变量。最常用的特殊变量为 $_,该变量包含了默认输入和模式匹配内容。

Kandy1iu的博客 978

Perl-Perl模块2

1. 使用简易模块 假设在程序里有个包含路径的长文件名,比如/usr/local/bin/perl,而你希望取出文件的基名(basename)而不包括目录。 my $name = "/usr/local/bin/perl"; (my $basename = $name) =~ s#.*##; use v5.14; my $name = "/usr/local/bin/perl"; my $basename = $name =~ s#.*##r; 这样写看起来好像不错,但实际上有安全隐患 unix上的文

Arkardia的博客 381

perl基本语法

变量的前缀是$ 数组是@ 关联数组是%

chivalry 619

perl转python_将Perl转换为Python

在使用正则表达式替换的行中,匹配组的插入必须是双转义的,或者替换字符串必须以r作为前缀以标记为正则表达式:line = re.sub(r"([^'])'t'(.)", "\\1THIS_IS_TRUE\\2", line)或者line = re.sub(r"([^'])'f'(.)", r"\1THIS_IS_FALSE\2", line)此外,在打印之前还应添加以下行:line = line.r...

weixin_39564524的博客 750

perl各个符号代表的意思

perl各个符号代表的意思 @ 数组 xx名字前面是美元符号(x{} x名字前面是美元符号(xx名字前面是美元符号(),后面是花括号({}),则其为 hash 元素 % 要引用整个 hash,使用百分号(“ )作为前缀。前面几页中使用的 hash 的名字为%family_name。 $! 系统产生的一些可读的信息,也可能是出错的信息 $_ 子函数参数变...

qq_36608036的博客 6596

perl脚本中匹配替换

##################################################################                  # shao.bing take off dial_prefix+prefix_dial from $CLphone_number                  ###############################

shao.bing的专栏 3171

Tomcat与Perl整合终极指南:传统CGI应用部署完整方案

Tomcat作为一款广泛使用的开源Web服务器,不仅擅长部署Java Web应用,还能通过CGI(Common Gateway Interface)技术无缝集成Perl脚本。本指南将带你快速掌握Tomcat环境下Perl CGI应用的部署方法,从基础配置到安全优化,让传统Perl应用在现代Java服务器中焕发新生。 ## 📋 为什么选择Tomcat部署Perl CGI? Tomcat的CGI

gitblog_00239的博客 1007
上一篇: 字符串循环移位
下一篇: Perl 内部结构详解 -- PerlGuts Illustrated
Bai_Yuanyong
博客等级 码龄24年 46粉丝 53原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值