【自己备用】HbuilderX浏览器运行(html中带.js文件时)(单独.html和html中有.css时)时出现404报错更换前的server.js文件内容plugins/nodeserver下
var path = require('path');
var args = process.argv.splice(2);
var express = require('express');
var net = require('net');
var app = express();
var argsjson =JSON.parse(args[0]); //解析参数
var projects = argsjson.projects; //项目信息
var port = argsjson.port; //server启动端口
var hot = argsjson.hot; //是否要热刷新
var marked = require('marked'); //markdown预览插件
var iconv = require('iconv-lite'); //流操作辅助模块
var fs = require('fs'); //文件操作模块,读取md文件
var cookieParser = require('cookie-parser'); //cookie模块
app.use(express.static(path.join(__dirname, 'public')));
app.use(express.static(path.join(__dirname, 'imgsource')));
app.use(cookieParser());
app.get('/dcloudmdpaser', function (req, res) { //markdown预览方法var filename = req.query.filename; //markdown文件(全路径)var theme = req.query.theme; //皮肤样式 默认/var projectname = req.query.projectname; //markdown文件所在项目,外部的markdown文件这个值是空的projectname = decodeURI(projectname);filename = decodeURI(filename);var repath = req.query.repath; //markdown文件相对于项目根路径的相对路径repath = decodeURI(repath);var charset = req.query.charset; //编码if(charset == "" || charset==undefined) {//不设置编码的话默认是u8charset = "utf-8";}if(theme==""||theme==undefined){ //默认使用github的markdown样式theme = "github-markdown.css";}var fileStr = fs.readFileSync(req.query.filename, {encoding:'binary'}); //读取markdown文件内容var buf = new Buffer(fileStr, 'binary');var str = iconv.decode(buf, charset);var html = marked(str); //使用marked解析markdown为htmlvar htmlstart = "<!DOCTYPE html><html><head><meta charset=\""+charset+"\" /><link rel=\"stylesheet\" href=\"/stylesheets/style.css\" type=\"text/css\" charset=\""+charset+"\" /><link rel=\"stylesheet\" href=\"/stylesheets/"+theme+"\" type=\"text/css\" charset=\""+charset+"\" /><link rel=\"stylesheet\" href=\"/stylesheets/prism.css\" type=\"text/css\" charset=\""+charset+"\" /><script src=\"/javascripts/prism.js\" type=\"text/javascript\" charset=\""+charset+"\"></script></head><body>"var htmlend = "</body></html>";html = htmlstart+html+htmlend;res.cookie('projectname', req.query.projectname, { expires: new Date(Date.now() + 900000), httpOnly: true }); //把项目名保存到cookie里res.cookie('repath', req.query.repath, { expires: new Date(Date.now() + 900000), httpOnly: true });//把相对路径保存到cookie里if(projectname==''){ //这说明是个外部的markdown文件var virtualprojectdir = filename.substring(0,filename.lastIndexOf("/")); //取出markdown文件所在目录var virtualprojectname = virtualprojectdir.substring(virtualprojectdir.lastIndexOf("/")+1,virtualprojectdir.length);//虚拟一个项目名出来//把虚拟出来的项目信息写到cookie里app.use('/'+encodeURIComponent(virtualprojectname),express.static(virtualprojectdir+''));res.cookie('projectname', virtualprojectname, { expires: new Date(Date.now() + 900000), httpOnly: true });res.cookie('repath', '', { expires: new Date(Date.now() + 900000), httpOnly: true });res.cookie('virtualprojectdir', virtualprojectdir, { expires: new Date(Date.now() + 900000), httpOnly: true });}else{//如果是项目内的markdown清除虚拟项目名res.cookie('virtualprojectdir', '', { expires: new Date(Date.now() + 900000), httpOnly: true });}res.send(html);
})
process.on('uncaughtException', function (err) { //这个是热刷新监听方法有时候会报错,但是不影响运行,catch住不管他console.error(err.stack);console.log("Node NOT Exiting...");
});//把项目路径添加到一个list里
var joins = new Array();
projects.forEach(function (value,index,array) {joins.push(path.resolve(decodeURIComponent(value.path)));
});//开启热刷新时,把上面的list传给对应参数
if (app.get('env') === 'development'&&hot) {var livereload = require('easy-livereload');app.use(livereload({watchDirs: joins,checkFunc:function(file){return true;},port: process.env.LIVERELOAD_PORT || 35729}));
}//静态目录代理
projects.forEach(function (value,index,array) {var pname = decodeURIComponent(value.name)var ppath = decodeURIComponent(value.path)app.use('/'+encodeURIComponent(pname),express.static(ppath+''));
});//处理静态监听找不到的文件
app.get('*', function(req, res){var projectname = req.cookies.projectname;var repath = req.cookies.repath;var virtualprojectdir = req.cookies.virtualprojectdir;var originalUrl = req.originalUrl;var ext ='';if(originalUrl.indexOf('.')>0){//后缀名,主要是监听看是不是图片ext = originalUrl.substring(originalUrl.lastIndexOf('.')+1);ext = ext.toLowerCase();}if(ext=='jpg'||ext=='png'||ext=='gif'){ //如果是图片大概率是markdown预览要使用的,那么拼下url看看能访问到不 if(virtualprojectdir!=''){//这个是外部markdown文件,那就直接以流的形式把图片丢回去res.set( 'content-type', ext );//设置返回类型var stream = fs.createReadStream( virtualprojectdir+"/"+req.cookies.repath+"/"+ originalUrl );var responseData = [];//存储文件流if (stream) {//判断状态stream.on( 'data', function( chunk ) {responseData.push( chunk );});stream.on( 'end', function() {var finalData = Buffer.concat( responseData );res.write( finalData );res.end();});}}else{//内部markdown文件,那么项目下必然存在该图片,重新组装下urlres.redirect("/" + req.cookies.projectname +"/"+req.cookies.repath+"/"+ originalUrl);}}else{//到这里说明这个文件真不知道是干啥的,在哪里了,返回404页面吧res.sendFile( __dirname + "/" + "404.html" );}
});//启动server
var server = app.listen(port, function () {console.log('server start at '+port);
})server.on('error', function(err) { console.log(err); });//热刷新代码
if(args.length > 1 && args[1].length>0){var count = 0;function checkMain(){var client= new net.Socket();client.connect(args[1], function(){count = 0;client.destroy();setTimeout(checkMain, 2000);});client.on('error',function(error){if(error.code === 'ENOENT'){count++;}if(count>=2){process.exit();}else{setTimeout(checkMain, 2000);}});}setTimeout(checkMain, 2000);
}
相关文章
- python的变量作用域问题
偶然掉进了一个坑里。仔细分析了下原因。原来是变量作用域的问题。简单抽象如下: id1 #许多行代码 [id for id in range(10)] #许多行代码if id!1:#做一些事情pass else:#做另外一些事情结果由于id在 [id for id in range(10)]中受到了影响发生了变化,导…...
2023/3/28 15:51:13 - 重载与覆盖
简述 重载:是指允许存在多个同名函数,而这些函数的参数列表不同(或许参数个数不同,或许参数类型不同,或许两者都不同)。(1) 参数列表主要包括:参数的类型,参数的个数,参…...
2023/3/28 15:51:13 - python list 的+、+=和extend操作
据说后者在list很大的时候性能稍好。 于是测试了一把: import timedef time_cost(func):def _time_cost(*args,**kw):t1time.time()func(*args,**kw)t2time.time()return t2-t1return _time_costtime_cost def test_add(list_a,huge_list_b):return list_ahuge_list…...
2023/3/28 15:51:12 - 引用与指针
简介 引用就是某个目标变量的“别名”(alias),对应用的操作与对变量直接操作效果完全相同。引用的声明方法:类型标识符 &引用名目标变量名。int a; int &raa; //定义引用ra,它是变量a的引用,即别名。 说明:(…...
2023/3/28 15:51:11 - postgresql 函数存储过程 ; 递归查询
函数:http://my.oschina.net/Kenyon/blog/108303 紧接上述,补充一下: 输入/输出参数的函数demo(输入作为变量影响sql结果,输出作为结果返回) create or replace function f_dept_salary_out2(int, out o_de…...
2023/3/28 15:51:11 - 虚析构函数
当派生类的对象从内存中撤销时一般先调用派生类的析构函数,然后再调用基类的析构函数。如果用new运算符建立了临时对象,若基类中有析构函数,并且定义了一个指向该基类的指针变量。在程序用带指针参数的delete运算符撤销对象时,会发…...
2023/3/28 15:51:10 - python 正则表达式点号与'\n'符号的问题
遇到了一个小虫,特记录之。 1.正则表达式及英文的处理如下: >>> import re >>> badfasdfasf<1safadsaf>23wfsa<13131> >>> pat re.compile(<.*?>) >>> pat.findall(b) [<1safadsaf>, <…...
2023/3/28 15:51:10 - MySQL中的alter方法
在表中添加新列add(after)alter table tbl_name add column col_name 字段类型 字段其他属性;例如:在id列后面添加name列。alter table student add column name varchar(20) not null after id.alter table tbl_name drop column col_name;删除表中的列…...
2023/3/28 15:51:09 - django中抽象基类的Foreignkey的定义
class base(models.Model):user models.ForeignKey(User)class Meta:abstract True以上是抽象基类的定义,只有一个公用字段user, class A(base):applier models.ForeignKey(User)那么是会报错的,如下: CommandError: One or mor…...
2023/3/28 15:51:08 - django 1.7+ default_permissions
由于做Caption要做权限设计。在核心类的设计的时候需要做好权限的基础设计。django 1.7以后 django.db.modes新增特性 default_permissions,官方文档语焉不详。 决定自己探索下,不想一一分析代码,遂引入bug,直接观察核心线路。 引…...
2023/3/28 15:51:07 - C++内存分配
分配方式详解 栈,就是那些由编译器在需要的时候分配,在不需要的时候自动清除的变量的存储区。里面的变量通常是局部变量、函数参数等。在一个进程中,位于用户虚拟地址空间顶部的是用户栈,编译器用它来实现函数的调用。 堆&#x…...
2023/3/28 15:51:07 - C++的参数
C支持可变参数的函数,这里的意思是C支持函数带有可变数量的参数,最常见的例子就是我们十分熟悉的printf()系列函数。我们还知道在函数调用时参数是自右向左压栈的。如果可变参数函数的一般形式是:f(p1, p2, p3, …),那么参数进栈&…...
2023/3/28 15:51:06 - 浅谈python的import
动态加载模块: 使用__import__ c__import__(sys)等价于 import sys不过前者可以在执行时决定。 静态加载: 也就是常规的import from xxx import yyyor import xxx.yyy xxx的最小粒度是文件, yyy的最小粒度是文件中的类/变量/函数。 import寻找…...
2023/3/28 15:51:06 - python 模块之间的变量共享
才疏学浅,只知道两种方式: 1. 通过__builtin__实现: builtin1.py import __builtin__ __builtin__.some_global_var_among_modulesblablablabuiltin2.py import builtin1 print some_global_var_among_modules2. 通过类的静态属性实现 A.py c…...
2023/3/28 15:51:05 - hive select * from和select 字段 from区别
select * from tbl_name limit 1,则不需要执行mapreduce任务,直接就可以读取相应的数据。 select 字段 from tbl_name limit 1,则需要执行相应的MapReduce任务,所以操作的时间很长。...
2023/3/28 15:51:05 - Hive中SELECT TOP N的方法(order by与sort by)
我想说的SELECT TOP N是取最大前N条或者最小前N条。 Hive提供了limit关键字,再配合order by可以很容易地实现SELECT TOP N。 但是在Hive中order by只能使用1个reduce,如果表的数据量很大,那么order by就会力不从心。 例如我们执行SQL…...
2023/3/28 15:51:04 - python日志浅析
输出日志对于追踪问题比较重要。 默认logger(root) python使用logging模块来处理日志。通常下面的用法就能满足常规需求: import logging logging.debug(some debug level info....)#debug级别消息 logging.info(some info level info...)#info级别消息 logging.war…...
2023/3/28 15:51:04 - Hive中的join
join 等连接 只有等连接才允许。select a.* from a join b on a.id b.id select a.* from a join b on (a.id b.id and a.department b.department)不等连接是不允许的。select a.* from a join b on a.id <> b.id在使用join写查询的时候有一个原则:应该将…...
2023/3/28 15:51:02 - django rest framework 的url标签的问题
如何在模板中引用一个在rest framework中的url? urls.py from django.conf.urls import patterns, url from .views import MenuViewSeturlpatterns patterns(,url(r^aaa/$,MenuViewSet.as_view({get: list}), namemenu_list))使用ViewSet的as_view方法,…...
2023/3/28 15:51:02 - backbone模型层浅析
Model层有两个类: Model, Collection 1.Model 不翻文档,我们用代码说话。 首先分析下类。 var myM Backbone.Model.extend({})//构造一个Model类,myM这个类居然是空的,没有官方所说的那么多属性啊,难道underscore失灵…...
2023/3/28 15:51:01 - shell中特殊变量$0 $1 $# $$ $! $?的涵义
$0:执行脚本的名字$*和$:将所有参数返回$#:参数的个数$_:代表上一个命令的最后一个参数$$:代表所在命令的PID$!:代表最后执行的后台命令的PID$?:代表上一个命令执行是否成功的标志,如果执行成功则$? 为0,否则不为0...
2023/3/28 15:51:00 - hive group by
在一个query里可以出现多个聚合函数,但是一个query语句里2个聚合函数只能有一个distinct。...
2023/3/28 15:50:59 - backbone django csrf_token的问题
由于这个加入了token的验证,因此在backbone调用Model/Collection的save时会失败,错误403。(这里不讨论劫持重发的问题) 解决方案是:修改xmlHttpRequest的header信息,方法如下: m.save({name:asd…...
2023/3/28 15:50:58 - 如何设计高效的缓存系统
缓存系统...
2023/3/28 15:50:58 - backbone调试
有一个谷歌的扩展程序:https://chrome.google.com/webstore/detail/backbone-debugger/bhljhndlimiafopmmhjlgfpnnchjjbhd 安装之。 这个工具的主要作用是,观察某个用户操作后,Backbone调用了哪些自己的接口。 demo演示地址: http…...
2023/3/28 15:50:57 - rest api设计的一般原则
本文参考自:http://www.ruanyifeng.com/blog/2014/05/restful_api.html,http://www.dongming8.cn/?p590 服务器端: 1. JSON形式: 请求method含义api建议格式(url) v1-版本号, 成功返回值失败码(典型)备注PUT 修改数据请求 (客户端…...
2023/3/28 15:50:55 - django 技巧锦集
1. 如何将model对象转化成一个dict,这在restful api的设计上会有用。 答案:使用django.forms.models的model_to_dict方法,demo如下: from django.forms.models import model_to_dict as m2d from django.contrib.auth.models impo…...
2023/3/28 15:50:54 - strcpy与memcpy的区别
strcpy和memcpy都是标准C库函数,它们有下面的特点。 strcpy提供了字符串的复制。即strcpy只用于字符串复制,并且它不仅复制字符串内容之外,还会复制字符串的结束符。 已知strcpy函数的原型是:char* strcpy(char* dest, const char…...
2023/3/28 15:50:53 - 浅析mongoEngine的document对象
引言: from mongoengine import * connect(local)class Test(Document):nameStringField(max_length32)t Test(nameTommy.Yu)方法描述DoesNotExistNoneMultipleObjectsReturnedNonecascade_save Recursively saves any references / generic references on an obje…...
2023/3/28 15:50:52 - 对n个整数进行排序,时间复杂度为o(n),空间复杂度为o(1)
假定你的数字范围在0到65535范围之内,定义一个数组count[65536](这个空间是常量,和n无关,所以是O(1) ),初值全部为0。那么假设有下面这些数字:10020030011906...那么对于每个这个数字,都做在cou…...
2023/3/28 15:50:52
最新文章
- python的变量作用域问题
偶然掉进了一个坑里。仔细分析了下原因。原来是变量作用域的问题。简单抽象如下: id1 #许多行代码 [id for id in range(10)] #许多行代码if id!1:#做一些事情pass else:#做另外一些事情结果由于id在 [id for id in range(10)]中受到了影响发生了变化,导…...
2023/3/28 15:51:13 - 重载与覆盖
简述 重载:是指允许存在多个同名函数,而这些函数的参数列表不同(或许参数个数不同,或许参数类型不同,或许两者都不同)。(1) 参数列表主要包括:参数的类型,参数的个数,参…...
2023/3/28 15:51:13 - python list 的+、+=和extend操作
据说后者在list很大的时候性能稍好。 于是测试了一把: import timedef time_cost(func):def _time_cost(*args,**kw):t1time.time()func(*args,**kw)t2time.time()return t2-t1return _time_costtime_cost def test_add(list_a,huge_list_b):return list_ahuge_list…...
2023/3/28 15:51:12 - 引用与指针
简介 引用就是某个目标变量的“别名”(alias),对应用的操作与对变量直接操作效果完全相同。引用的声明方法:类型标识符 &引用名目标变量名。int a; int &raa; //定义引用ra,它是变量a的引用,即别名。 说明:(…...
2023/3/28 15:51:11 - postgresql 函数存储过程 ; 递归查询
函数:http://my.oschina.net/Kenyon/blog/108303 紧接上述,补充一下: 输入/输出参数的函数demo(输入作为变量影响sql结果,输出作为结果返回) create or replace function f_dept_salary_out2(int, out o_de…...
2023/3/28 15:51:11 - 虚析构函数
当派生类的对象从内存中撤销时一般先调用派生类的析构函数,然后再调用基类的析构函数。如果用new运算符建立了临时对象,若基类中有析构函数,并且定义了一个指向该基类的指针变量。在程序用带指针参数的delete运算符撤销对象时,会发…...
2023/3/28 15:51:10 - python 正则表达式点号与'\n'符号的问题
遇到了一个小虫,特记录之。 1.正则表达式及英文的处理如下: >>> import re >>> badfasdfasf<1safadsaf>23wfsa<13131> >>> pat re.compile(<.*?>) >>> pat.findall(b) [<1safadsaf>, <…...
2023/3/28 15:51:10 - MySQL中的alter方法
在表中添加新列add(after)alter table tbl_name add column col_name 字段类型 字段其他属性;例如:在id列后面添加name列。alter table student add column name varchar(20) not null after id.alter table tbl_name drop column col_name;删除表中的列…...
2023/3/28 15:51:09 - django中抽象基类的Foreignkey的定义
class base(models.Model):user models.ForeignKey(User)class Meta:abstract True以上是抽象基类的定义,只有一个公用字段user, class A(base):applier models.ForeignKey(User)那么是会报错的,如下: CommandError: One or mor…...
2023/3/28 15:51:08 - django 1.7+ default_permissions
由于做Caption要做权限设计。在核心类的设计的时候需要做好权限的基础设计。django 1.7以后 django.db.modes新增特性 default_permissions,官方文档语焉不详。 决定自己探索下,不想一一分析代码,遂引入bug,直接观察核心线路。 引…...
2023/3/28 15:51:07 - C++内存分配
分配方式详解 栈,就是那些由编译器在需要的时候分配,在不需要的时候自动清除的变量的存储区。里面的变量通常是局部变量、函数参数等。在一个进程中,位于用户虚拟地址空间顶部的是用户栈,编译器用它来实现函数的调用。 堆&#x…...
2023/3/28 15:51:07 - C++的参数
C支持可变参数的函数,这里的意思是C支持函数带有可变数量的参数,最常见的例子就是我们十分熟悉的printf()系列函数。我们还知道在函数调用时参数是自右向左压栈的。如果可变参数函数的一般形式是:f(p1, p2, p3, …),那么参数进栈&…...
2023/3/28 15:51:06 - 浅谈python的import
动态加载模块: 使用__import__ c__import__(sys)等价于 import sys不过前者可以在执行时决定。 静态加载: 也就是常规的import from xxx import yyyor import xxx.yyy xxx的最小粒度是文件, yyy的最小粒度是文件中的类/变量/函数。 import寻找…...
2023/3/28 15:51:06 - python 模块之间的变量共享
才疏学浅,只知道两种方式: 1. 通过__builtin__实现: builtin1.py import __builtin__ __builtin__.some_global_var_among_modulesblablablabuiltin2.py import builtin1 print some_global_var_among_modules2. 通过类的静态属性实现 A.py c…...
2023/3/28 15:51:05 - hive select * from和select 字段 from区别
select * from tbl_name limit 1,则不需要执行mapreduce任务,直接就可以读取相应的数据。 select 字段 from tbl_name limit 1,则需要执行相应的MapReduce任务,所以操作的时间很长。...
2023/3/28 15:51:05 - Hive中SELECT TOP N的方法(order by与sort by)
我想说的SELECT TOP N是取最大前N条或者最小前N条。 Hive提供了limit关键字,再配合order by可以很容易地实现SELECT TOP N。 但是在Hive中order by只能使用1个reduce,如果表的数据量很大,那么order by就会力不从心。 例如我们执行SQL…...
2023/3/28 15:51:04 - python日志浅析
输出日志对于追踪问题比较重要。 默认logger(root) python使用logging模块来处理日志。通常下面的用法就能满足常规需求: import logging logging.debug(some debug level info....)#debug级别消息 logging.info(some info level info...)#info级别消息 logging.war…...
2023/3/28 15:51:04 - Hive中的join
join 等连接 只有等连接才允许。select a.* from a join b on a.id b.id select a.* from a join b on (a.id b.id and a.department b.department)不等连接是不允许的。select a.* from a join b on a.id <> b.id在使用join写查询的时候有一个原则:应该将…...
2023/3/28 15:51:02 - django rest framework 的url标签的问题
如何在模板中引用一个在rest framework中的url? urls.py from django.conf.urls import patterns, url from .views import MenuViewSeturlpatterns patterns(,url(r^aaa/$,MenuViewSet.as_view({get: list}), namemenu_list))使用ViewSet的as_view方法,…...
2023/3/28 15:51:02 - backbone模型层浅析
Model层有两个类: Model, Collection 1.Model 不翻文档,我们用代码说话。 首先分析下类。 var myM Backbone.Model.extend({})//构造一个Model类,myM这个类居然是空的,没有官方所说的那么多属性啊,难道underscore失灵…...
2023/3/28 15:51:01 - shell中特殊变量$0 $1 $# $$ $! $?的涵义
$0:执行脚本的名字$*和$:将所有参数返回$#:参数的个数$_:代表上一个命令的最后一个参数$$:代表所在命令的PID$!:代表最后执行的后台命令的PID$?:代表上一个命令执行是否成功的标志,如果执行成功则$? 为0,否则不为0...
2023/3/28 15:51:00 - hive group by
在一个query里可以出现多个聚合函数,但是一个query语句里2个聚合函数只能有一个distinct。...
2023/3/28 15:50:59 - backbone django csrf_token的问题
由于这个加入了token的验证,因此在backbone调用Model/Collection的save时会失败,错误403。(这里不讨论劫持重发的问题) 解决方案是:修改xmlHttpRequest的header信息,方法如下: m.save({name:asd…...
2023/3/28 15:50:58 - 如何设计高效的缓存系统
缓存系统...
2023/3/28 15:50:58 - backbone调试
有一个谷歌的扩展程序:https://chrome.google.com/webstore/detail/backbone-debugger/bhljhndlimiafopmmhjlgfpnnchjjbhd 安装之。 这个工具的主要作用是,观察某个用户操作后,Backbone调用了哪些自己的接口。 demo演示地址: http…...
2023/3/28 15:50:57 - rest api设计的一般原则
本文参考自:http://www.ruanyifeng.com/blog/2014/05/restful_api.html,http://www.dongming8.cn/?p590 服务器端: 1. JSON形式: 请求method含义api建议格式(url) v1-版本号, 成功返回值失败码(典型)备注PUT 修改数据请求 (客户端…...
2023/3/28 15:50:55 - django 技巧锦集
1. 如何将model对象转化成一个dict,这在restful api的设计上会有用。 答案:使用django.forms.models的model_to_dict方法,demo如下: from django.forms.models import model_to_dict as m2d from django.contrib.auth.models impo…...
2023/3/28 15:50:54 - strcpy与memcpy的区别
strcpy和memcpy都是标准C库函数,它们有下面的特点。 strcpy提供了字符串的复制。即strcpy只用于字符串复制,并且它不仅复制字符串内容之外,还会复制字符串的结束符。 已知strcpy函数的原型是:char* strcpy(char* dest, const char…...
2023/3/28 15:50:53 - 浅析mongoEngine的document对象
引言: from mongoengine import * connect(local)class Test(Document):nameStringField(max_length32)t Test(nameTommy.Yu)方法描述DoesNotExistNoneMultipleObjectsReturnedNonecascade_save Recursively saves any references / generic references on an obje…...
2023/3/28 15:50:52 - 对n个整数进行排序,时间复杂度为o(n),空间复杂度为o(1)
假定你的数字范围在0到65535范围之内,定义一个数组count[65536](这个空间是常量,和n无关,所以是O(1) ),初值全部为0。那么假设有下面这些数字:10020030011906...那么对于每个这个数字,都做在cou…...
2023/3/28 15:50:52