- jEasyUI 创建基础树形网格
lsx202406
开发语言
jEasyUI创建基础树形网格引言jEasyUI是一个基于jQuery的易于使用的界面框架,它提供了丰富的UI组件,帮助开发者快速构建富有交互性的网页应用。树形网格(TreeGrid)是jEasyUI提供的一个特殊网格,它结合了树形结构的层级和表格的列数据展示,非常适合展示具有层级关系的数据。本文将详细介绍如何使用jEasyUI创建一个基础的树形网格。准备工作在开始之前,请确保已经引入了jEasy
- 解决UniDBTreeGrid在数据更新后自动折叠的问题
蝈蝈(GuoGuo)
UniGuijava前端javascript
UniDBTreeGrid控件在数据更新之后,总是会自动折叠,我想要让它既更新了数据,又不自动折叠。解决的办法如下:UniDBTreeGrid->ClientEvents->1.UniEvents->functionbeforeInit:functionbeforeInit(sender,config){sender.expandedNodes=[];}2.ExtEvents->functions
- EasyUI treegrid 深度级联勾选扩展
陌上无人花自开否
参考文章:EasyUItreegrid级联勾选或深度级联勾选扩展:两种扩展在此参考文章的基础上进行扩展:判断子节点是否全选,若全选了,则勾选父节点,否则不勾选(function($){/***扩展树表格级联勾选方法:*@param{Object}container*@param{Object}options*@return{TypeName}*/$.extend($.fn.treegrid.met
- EasyUI + ajax + treegrid/datagrid 接收 json 数据,显示树状/网状表结构
weixin_30808253
jsonjavascript前端框架ViewUI
最后一更了,时间间隔有点久了~~EasyUI作为一个成熟的前端框架,封装了ajax,对于数据的处理配合datagrid组件的使用,使其非常适合后台管理界面的开发(目前来说界面有点过时了)。通过ajax向后台请求数据,只要将返回的json数据处理成easyui所需要的数据格式,datagrid可以自行处理进行数据展示。下面介绍,datagrid表格和treegrid树表两种表格形式。DataGrid
- iOS中的Flex布局-FlexLib的使用
QiShare
一.概述进行iOS项目开发时,常用的布局方式有两种:Frame布局和AutoLayout,Frame布局没啥可说的,直接设置控件的横纵坐标,并指定宽高。AutoLayout是通过设置控件相对位置的约束进行布局。AutoLayout的本意是好的,但是由于他的语法实在不怎么友好,导致我们在实际项目开发中用的并不多,只能靠Masonry这样的第三方库来使用它。Masonry布局虽然容易理解,但是它的代码
- 2013年11月16Aspx源码发布详情
dbn4053
测试数据库c#
基本权限管理框架2013源码2013-11-30[VS2010]源码介绍:基本权限管理框架2012源码本次更新内容:1、代码全部重新优化重写。2、个性化设置支持皮肤切换,7种导航菜单表现模式。3、全部使用jQuery.EasyUI框架组件。4、重新权限设置操作方式,使用treegrid的表现方式5、完善操作日志功能。6、导航菜单中的按钮,可以分别进行排序。7、加入高级查询功能。8、导航菜单支持N级
- EasyUI treegrid checkbox复选框 显示或隐藏
若能遇见
首先给需要的列添加复选框;{field:'CHECKED_TASK_PROGRESS',checkbox:true,title:'',width:90,align:'left'}, 看到的效果就是这样; image.png 我这里的展开子级是通过异步加载的;//点击父节点,异步加载数据onBeforeExpand:function(row){if(row){varparentId=row
- UI库DHTMLX Suite v8.2发布全新表单组件,让Web表单实现高度可定制!
界面开发小八哥
DHTMLX甘特图javascriptui
DHTMLXSuitev8.2日前已正式发布,此版本的核心是DHTMLXForm,这个小部件接收了4个备受期待的新控件,如Fieldset、Avatar、Toggle和ToggleGroup。官方技术团队还为Grid和TreeGrid小部件中的页眉/页脚工具提示提供了一系列新的配置选项等。在本文中,我们提供了这个版本的详细概述。DHTMLXSuitev8.2正式版下载DHTMLXForm的新控件D
- easyui的树形表格treegrid实现合并单元格的功能
小薇同学v
easyui的datagrid数据表格实现单元格是很容易实现的,但是想要树形结构treegrid的表格合并单元格就很难了。我在网上查了一圈,都没有查到实现的办法!绞尽脑汁之后,终于实现了这个合并的功能!主要就是根据最外层级来判断,一层一层的判断来进行合并。如下//树型结构合并单元格的方法functionmergeCell(row,field){$(".datagrid-view2.datagrid
- easyUI解决formatter获取不到rowIndex:行的索引。
相濡逸墨
javaeasyUI
1.首先确认你用的是否为datagrid2.如果用的是treegrid。treegrid是没有rowIndex的,可以通过rowData(行的记录数据),获取设置的idField,idField字段即是rowIndex。
- 用easyui DataGrid编辑树形资料
火星牛
Javascripteasyui前端javascriptvue.js
easyui显示编辑树形资料有TreeGrid元件,但是这个元件的vue版本和react版本没有分页功能。virtualscroll功能也表现不佳。我用DataGrid来处理。要解决的问题点:(1)如何显示成树形。即,子节点如何有缩进。先计算好每个节点的层级level,然后template中设置缩进大小。0":class="getDDKeyExpanderClass(row)"@click="on
- 基于jQuery的TreeGrid组件详解
青花锁
javascript
一、组件使用范例html代码:当前选中的行:Js代码:varconfig={id:"tg1",width:"800",renderTo:"div1",headerAlign:"left",headerHeight:"30",dataAlign:"left",indentation:"20",folderOpenIcon:"images/folderOpen.gif",folderCloseIcon
- Easyui学习整理笔记
smileNicky
@[toc]对工作中遇到的easyui做一下笔记,不定时更新(1)表格双击事件datagrid和treegrid都适用,例子:onDblClickRow:function(rowIndex,rowData){varselections=$("#areaList").datagrid('getSelections');varareaSeq=selections[0].areaSeq;varareaN
- BootStrap-Table-Treegrid树形表格使用指南,java序列化的原理
m0_63102527
程序员面试java后端
其中combotree.js是自己写的一个js文件,用于下拉树显示。下面附有代码。页面部分代码(页面只需要一个table标签用于存放数据就可以了,可以自定义一些操作表格的按钮,比如增删改)。新增修改删除JS部分代码,获取数据,渲染表格,其中的字段名需要和实体类中的字段名一样。var$table=$("#menu_table");$("#menu_table").bootstrapTable({ur
- DataTables TreeGrid 插件 可以快速实现树形表格
Micro麦可乐
JQUERYjquerydatatablestreeGrid树形表格
dataTables.treeGrid插件介绍更新日志真实系统展现效果DEMO参考使用方法DataTable渲染JSON数据格式HTML数据格式(以DEMO截图代码为例)插件介绍针对DataTables写的树形表格插件(什么是DataTables?可以点击访问官网了解)在原DataTables基础上可以快速实现树形表格的渲染:1、支持自定义展开/收缩图标2、支持自定义缩进距离3、N层子集展开父级收
- shiro 同时实现url和按钮的拦截_项目一:第十二天 1、常见权限控制方式 2、基于shiro提供url拦截方式验证权限 3、在realm中授权 5、总结验证权限方式(四种) 6、用户注销7、基于...
weixin_39709262
shiro同时实现url和按钮的拦截
1课程计划1、常见权限控制方式2、基于shiro提供url拦截方式验证权限3、在realm中授权4、基于shiro提供注解方式验证权限5、总结验证权限方式(四种)6、用户注销7、基于treegrid实现菜单展示2常见的权限控制方式2.1url拦截实现权限控制shiro基于过滤器实现的2.2注解方式实现权限控制底层:代理技术3基于shiro的url拦截方式验权/js/**=anon/images/*
- 基于springboot和ajax的简单项目 09菜单的前端,使用插件treegrid
qq_38757863
前端ajaxjavascript
01第一步:在菜单列表页面引入treeGrid插件相关的JS。02.第二步:在菜单列表页面,定义菜单列表配置信息,关键代码如下:varcolumns=[{field:'selectItem',radio:true},{title:'菜单ID',field:'id',align:'center',valign:'middle',width:'80px'},{title:'菜单名称',field:'n
- C#:Krypton控件使用方法详解(第十八讲) —— kryptonButton之事件篇
一个会的不多的人
C#WinFormc#开发语言.net
今天要介绍的是kryptonButton这个控件的事件。首先介绍的是kryptonButton1_Click事件,这个事件表示在单击控件的时候发生的事情。如下图所示:下面通过一个例子介绍一下:privatevoidkryptonButton1_Click(objectsender,EventArgse){KryptonTreeGridNodeRowkryptonTreeGridNodeRow=kr
- vue-form-table(vuejs+element-ui的表格表单控件的二次封装插件)
涳涳嘚慌
vue-form-table介绍基于element-ui的el-form和el-table做的二次封装仓库地址:https://gitee.com/ziyuan_xcc/vue-form-table组件说明文档:https://shimo.im/docs/Pg3WWJpYr6PJHjqh示例在这里插入图片描述myFormTreeGridimportmyFormfrom'@/components/f
- 关于FlexLib的一些问题解答
舒马赫
针对现在FlexLib的用户越来越多,问的问题也越来越多,这里对大多数用户碰到的问题做一个统一回复。使用FlexLib会被拒绝上架吗?现在使用FlexLib的大概有几十个app,还没有听说有被拒绝的例子。为什么有时候按下Cmd+R界面就变空白了?预览有三种方式:(1)Cmd+R,这种方法有局限性,主要是不会重新执行数据加载逻辑以及viewDidLoad,仅仅是重新加载界面,所以如果需要执行relo
- TreeGrid插件
我们可以用TreeGrid插件来实现菜单目录以树结构来呈现具体代码如下:Titlevarcolumns=[{title:'菜单ID',field:'id',align:'center',valign:'middle',width:'80px'},{title:'菜单名称',field:'name',align:'center',valign:'middle',width:'130px'},{tit
- 2021-12-09 将字符串格式化成json时有特殊字符例如换行符/n、/r报错解决方法
小丸子_7043
问题截图:1.先将特殊字符replace后格式化。参考资料:https://www.cnblogs.com/alsf/p/8662189.htmlTreeGrid.str2json=function(s){debuggervarjson=null;//json=eval('('+s+')');vartemp=s.replace(/\n/g,"\\n").replace(/\r/g,"\\r")js
- bootstrap-table + treegrid 实现树形表格
Jason_M_Ho
实现一个树形表格的时候有多种方法:比如把ztree的树形直接拼接成表格,或者用强大的jqgrid实现,今天介绍一个比较轻量级的实现:使用bootstrap-table+treegrid。引入jquery.js、bootstrap-table.js、bootstrap-table-treegrid.js、jquery.treegrid.js以及相应的css文件:bootstrap.css、boots
- python对属性的搜索优先级
冯斯特罗
当获取元素的时候,实际上调用的是object.__getattribute__(key)所谓的搜索优先级实际上是object.__getattribute__(key)实现的DataDescriptor和Non-dataDescriptor的不同体现在关于实例字典条目的覆盖和计算顺序上。如果实例字典中包含了与DataDescriptor同名的属性,那么DataDescriptor优先。如果实例字典
- java中压缩文件并下载的实例详解
当我们对一些需要用到的资料进行整理时,会发现文件的内存占用很大,不过是下载或者存储,都不是很方便,这时候我们会想到把文件变成zip格式,即进行压缩。在正式开始压缩和下载文件之前,我们可以先对zip的格式进行一个了解,然后再就具体的方法给大家带来分享。1、ZIP文件格式[localfileheader+filedata+datadescriptor]{1,n}+centraldirectory+en
- EEG Dataset LEMON dataset
cggl
DataDescriptor:Amind-brainbodydatasetofMRI,EEG,cognition,emotion,andperipheralphysiologyinyoungandoldadultsdataseturl:http://fcon_1000.projects.nitrc.org/indi/retro/MPI_LEMON.html一个来自science的文章,里边包含了一
- Ztree实现增删改查
于影
java
1.和另一篇文章--[TreeGrid实现增删改查]前面的内容一致,只需要创建一个html页面,命名为ztree-01.html,粘贴如下网址的代码进入ztree-01.html。访问http://www.treejs.cn/v3/faq.php#_206复制这些代码ZTREEDEMOvarzTreeObj;//zTree的参数配置,深入使用请参考API文档(setting配置详解)varsett
- TreeGrid 实现增删改查
于影
java
考试业务描述将数据库中的品类(商品分类)信息从数据库中加载到客户端然后以tree结构方式进行数据的呈现,并在此table的基础之上拓展其它业务操作(添加,修改,删除)系统原型设计1)参考https://www.bootstrap-table.com网址中的treeGrid进行数据呈现具体demo网址:https://examples.bootstraptable.com/#extensions/t
- EASYUI updateRow 方法 field无法为变量的解决方法
bossszhou
今天在开发过程中用treegrid的updateRow方法希望往row参数中的field中传变量,但调试时却发现他解析得到的是变量名,并不是我想要的变量值,一脸懵逼vareditCellIndex;vareditingField="name";varusername="马大哥";$('#tt').treegrid('updateRow',{index:editngId,row:{editingFi
- jqGrid 树形表格多选
zrk1000
jsjqgrid
jqGrid失款不可多得的轻量级前端框架,需求的需要,使用了jqGrid的treeGrid做数据展示,其对异步展开节点支持的很好,用起来很省心。使用中有对树形的数据多选的需求,需要选择一个节点,同时选择其所有子节点;查看了API,发现treeGrid不支持,还是自己动手来完成,废话不多说,先上个图:下面是关键代码:colNames:['id',nameFormat,'type']colModel:
- JAVA基础
灵静志远
位运算加载Date字符串池覆盖
一、类的初始化顺序
1 (静态变量,静态代码块)-->(变量,初始化块)--> 构造器
同一括号里的,根据它们在程序中的顺序来决定。上面所述是同一类中。如果是继承的情况,那就在父类到子类交替初始化。
二、String
1 String a = "abc";
JAVA虚拟机首先在字符串池中查找是否已经存在了值为"abc"的对象,根
- keepalived实现redis主从高可用
bylijinnan
redis
方案说明
两台机器(称为A和B),以统一的VIP对外提供服务
1.正常情况下,A和B都启动,B会把A的数据同步过来(B is slave of A)
2.当A挂了后,VIP漂移到B;B的keepalived 通知redis 执行:slaveof no one,由B提供服务
3.当A起来后,VIP不切换,仍在B上面;而A的keepalived 通知redis 执行slaveof B,开始
- java文件操作大全
0624chenhong
java
最近在博客园看到一篇比较全面的文件操作文章,转过来留着。
http://www.cnblogs.com/zhuocheng/archive/2011/12/12/2285290.html
转自http://blog.sina.com.cn/s/blog_4a9f789a0100ik3p.html
一.获得控制台用户输入的信息
&nbs
- android学习任务
不懂事的小屁孩
工作
任务
完成情况 搞清楚带箭头的pupupwindows和不带的使用 已完成 熟练使用pupupwindows和alertdialog,并搞清楚两者的区别 已完成 熟练使用android的线程handler,并敲示例代码 进行中 了解游戏2048的流程,并完成其代码工作 进行中-差几个actionbar 研究一下android的动画效果,写一个实例 已完成 复习fragem
- zoom.js
换个号韩国红果果
oom
它的基于bootstrap 的
https://raw.github.com/twbs/bootstrap/master/js/transition.js transition.js模块引用顺序
<link rel="stylesheet" href="style/zoom.css">
<script src=&q
- 详解Oracle云操作系统Solaris 11.2
蓝儿唯美
Solaris
当Oracle发布Solaris 11时,它将自己的操作系统称为第一个面向云的操作系统。Oracle在发布Solaris 11.2时继续它以云为中心的基调。但是,这些说法没有告诉我们为什么Solaris是配得上云的。幸好,我们不需要等太久。Solaris11.2有4个重要的技术可以在一个有效的云实现中发挥重要作用:OpenStack、内核域、统一存档(UA)和弹性虚拟交换(EVS)。
- spring学习——springmvc(一)
a-john
springMVC
Spring MVC基于模型-视图-控制器(Model-View-Controller,MVC)实现,能够帮助我们构建像Spring框架那样灵活和松耦合的Web应用程序。
1,跟踪Spring MVC的请求
请求的第一站是Spring的DispatcherServlet。与大多数基于Java的Web框架一样,Spring MVC所有的请求都会通过一个前端控制器Servlet。前
- hdu4342 History repeat itself-------多校联合五
aijuans
数论
水题就不多说什么了。
#include<iostream>#include<cstdlib>#include<stdio.h>#define ll __int64using namespace std;int main(){ int t; ll n; scanf("%d",&t); while(t--)
- EJB和javabean的区别
asia007
beanejb
EJB不是一般的JavaBean,EJB是企业级JavaBean,EJB一共分为3种,实体Bean,消息Bean,会话Bean,书写EJB是需要遵循一定的规范的,具体规范你可以参考相关的资料.另外,要运行EJB,你需要相应的EJB容器,比如Weblogic,Jboss等,而JavaBean不需要,只需要安装Tomcat就可以了
1.EJB用于服务端应用开发, 而JavaBeans
- Struts的action和Result总结
百合不是茶
strutsAction配置Result配置
一:Action的配置详解:
下面是一个Struts中一个空的Struts.xml的配置文件
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
&quo
- 如何带好自已的团队
bijian1013
项目管理团队管理团队
在网上看到博客"
怎么才能让团队成员好好干活"的评论,觉得写的比较好。 原文如下: 我做团队管理有几年了吧,我和你分享一下我认为带好团队的几点:
1.诚信
对团队内成员,无论是技术研究、交流、问题探讨,要尽可能的保持一种诚信的态度,用心去做好,你的团队会感觉得到。 2.努力提
- Java代码混淆工具
sunjing
ProGuard
Open Source Obfuscators
ProGuard
http://java-source.net/open-source/obfuscators/proguardProGuard is a free Java class file shrinker and obfuscator. It can detect and remove unused classes, fields, m
- 【Redis三】基于Redis sentinel的自动failover主从复制
bit1129
redis
在第二篇中使用2.8.17搭建了主从复制,但是它存在Master单点问题,为了解决这个问题,Redis从2.6开始引入sentinel,用于监控和管理Redis的主从复制环境,进行自动failover,即Master挂了后,sentinel自动从从服务器选出一个Master使主从复制集群仍然可以工作,如果Master醒来再次加入集群,只能以从服务器的形式工作。
什么是Sentine
- 使用代理实现Hibernate Dao层自动事务
白糖_
DAOspringAOP框架Hibernate
都说spring利用AOP实现自动事务处理机制非常好,但在只有hibernate这个框架情况下,我们开启session、管理事务就往往很麻烦。
public void save(Object obj){
Session session = this.getSession();
Transaction tran = session.beginTransaction();
try
- maven3实战读书笔记
braveCS
maven3
Maven简介
是什么?
Is a software project management and comprehension tool.项目管理工具
是基于POM概念(工程对象模型)
[设计重复、编码重复、文档重复、构建重复,maven最大化消除了构建的重复]
[与XP:简单、交流与反馈;测试驱动开发、十分钟构建、持续集成、富有信息的工作区]
功能:
- 编程之美-子数组的最大乘积
bylijinnan
编程之美
public class MaxProduct {
/**
* 编程之美 子数组的最大乘积
* 题目: 给定一个长度为N的整数数组,只允许使用乘法,不能用除法,计算任意N-1个数的组合中乘积中最大的一组,并写出算法的时间复杂度。
* 以下程序对应书上两种方法,求得“乘积中最大的一组”的乘积——都是有溢出的可能的。
* 但按题目的意思,是要求得这个子数组,而不
- 读书笔记-2
chengxuyuancsdn
读书笔记
1、反射
2、oracle年-月-日 时-分-秒
3、oracle创建有参、无参函数
4、oracle行转列
5、Struts2拦截器
6、Filter过滤器(web.xml)
1、反射
(1)检查类的结构
在java.lang.reflect包里有3个类Field,Method,Constructor分别用于描述类的域、方法和构造器。
2、oracle年月日时分秒
s
- [求学与房地产]慎重选择IT培训学校
comsci
it
关于培训学校的教学和教师的问题,我们就不讨论了,我主要关心的是这个问题
培训学校的教学楼和宿舍的环境和稳定性问题
我们大家都知道,房子是一个比较昂贵的东西,特别是那种能够当教室的房子...
&nb
- RMAN配置中通道(CHANNEL)相关参数 PARALLELISM 、FILESPERSET的关系
daizj
oraclermanfilespersetPARALLELISM
RMAN配置中通道(CHANNEL)相关参数 PARALLELISM 、FILESPERSET的关系 转
PARALLELISM ---
我们还可以通过parallelism参数来指定同时"自动"创建多少个通道:
RMAN > configure device type disk parallelism 3 ;
表示启动三个通道,可以加快备份恢复的速度。
- 简单排序:冒泡排序
dieslrae
冒泡排序
public void bubbleSort(int[] array){
for(int i=1;i<array.length;i++){
for(int k=0;k<array.length-i;k++){
if(array[k] > array[k+1]){
- 初二上学期难记单词三
dcj3sjt126com
sciet
concert 音乐会
tonight 今晚
famous 有名的;著名的
song 歌曲
thousand 千
accident 事故;灾难
careless 粗心的,大意的
break 折断;断裂;破碎
heart 心(脏)
happen 偶尔发生,碰巧
tourist 旅游者;观光者
science (自然)科学
marry 结婚
subject 题目;
- I.安装Memcahce 1. 安装依赖包libevent Memcache需要安装libevent,所以安装前可能需要执行 Shell代码 收藏代码
dcj3sjt126com
redis
wget http://download.redis.io/redis-stable.tar.gz
tar xvzf redis-stable.tar.gz
cd redis-stable
make
前面3步应该没有问题,主要的问题是执行make的时候,出现了异常。
异常一:
make[2]: cc: Command not found
异常原因:没有安装g
- 并发容器
shuizhaosi888
并发容器
通过并发容器来改善同步容器的性能,同步容器将所有对容器状态的访问都串行化,来实现线程安全,这种方式严重降低并发性,当多个线程访问时,吞吐量严重降低。
并发容器ConcurrentHashMap
替代同步基于散列的Map,通过Lock控制。
&nb
- Spring Security(12)——Remember-Me功能
234390216
Spring SecurityRemember Me记住我
Remember-Me功能
目录
1.1 概述
1.2 基于简单加密token的方法
1.3 基于持久化token的方法
1.4 Remember-Me相关接口和实现
- 位运算
焦志广
位运算
一、位运算符C语言提供了六种位运算符:
& 按位与
| 按位或
^ 按位异或
~ 取反
<< 左移
>> 右移
1. 按位与运算 按位与运算符"&"是双目运算符。其功能是参与运算的两数各对应的二进位相与。只有对应的两个二进位均为1时,结果位才为1 ,否则为0。参与运算的数以补码方式出现。
例如:9&am
- nodejs 数据库连接 mongodb mysql
liguangsong
mongodbmysqlnode数据库连接
1.mysql 连接
package.json中dependencies加入
"mysql":"~2.7.0"
执行 npm install
在config 下创建文件 database.js
- java动态编译
olive6615
javaHotSpotjvm动态编译
在HotSpot虚拟机中,有两个技术是至关重要的,即动态编译(Dynamic compilation)和Profiling。
HotSpot是如何动态编译Javad的bytecode呢?Java bytecode是以解释方式被load到虚拟机的。HotSpot里有一个运行监视器,即Profile Monitor,专门监视
- Storm0.9.5的集群部署配置优化
roadrunners
优化storm.yaml
nimbus结点配置(storm.yaml)信息:
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional inf
- 101个MySQL 的调节和优化的提示
tomcat_oracle
mysql
1. 拥有足够的物理内存来把整个InnoDB文件加载到内存中——在内存中访问文件时的速度要比在硬盘中访问时快的多。 2. 不惜一切代价避免使用Swap交换分区 – 交换时是从硬盘读取的,它的速度很慢。 3. 使用电池供电的RAM(注:RAM即随机存储器)。 4. 使用高级的RAID(注:Redundant Arrays of Inexpensive Disks,即磁盘阵列
- zoj 3829 Known Notation(贪心)
阿尔萨斯
ZOJ
题目链接:zoj 3829 Known Notation
题目大意:给定一个不完整的后缀表达式,要求有2种不同操作,用尽量少的操作使得表达式完整。
解题思路:贪心,数字的个数要要保证比∗的个数多1,不够的话优先补在开头是最优的。然后遍历一遍字符串,碰到数字+1,碰到∗-1,保证数字的个数大于等1,如果不够减的话,可以和最后面的一个数字交换位置(用栈维护十分方便),因为添加和交换代价都是1