我们来看图:下面以整数541270936,k=3为例
当遍历到数字5,数字5入栈 原整数 541270936 stack 5
当遍历到数字4时,发现4<5,所以数字5出栈,数字4入栈。
原整数 541270936 stack 4
3.当遍历到数字1的时候,4>1,所以4出栈,1入栈
原整数 541270936 stack 14.然后遍历2,7,依次入栈
stack 1275,遍历到0时,7>0,则栈顶的7出栈,0进行入栈
stack 1206.我们的删除次数已经用完,将剩下数字一起写入栈中
stack 120936代码展示
//删除整数的K个数字,获得删除后的最小值 #include<iostream> using namespace std; void RemoveDidits(string num,int k){ int length=num.length(); char stack[length]; int newlength=length-k; //遍历所有的数字 int top=0; for(int i=0;i<length;i++){ //当栈顶元素大于遍历到的数字时,栈顶元素出栈,新的元素入栈 while(top>0&&num[i]<stack[top-1]&&k>0){ top--;//栈顶元素出栈 k--; stack[top]=num[i];//新的元素入栈 } stack[top++]=num[i];//剩余元素入栈,这个最先进行一次,然后依次进行判断 } //找到栈中第一个非零数字的位置,依次构建新的整数字符串 int offset=0; while(offset<newlength&&stack[offset]=='0'){ offset++; } for(int i=offset;i<newlength;i++){ cout<<stack[i]; } cout<<endl; } int main(int argc, char const *argv[]) { RemoveDidits("541270936",3); RemoveDidits("1593212",3); RemoveDidits("30200",1); RemoveDidits("10",2); return 0; }结果展示