分析:这道题的难点在分析,怎样删除可以使数字最小,答案是当第i位比第i+1位大的时候,删除较大位可以使数字较小,当没有i > i+1时,删除最后面几位,整个数字最小。该方法可以使用贪心。
代码:
string getMin(string str,int k){
string::iterator start;
bool flag;
for(int i = k;i > 0;--i){
flag = false;
// 删除一个第i位大于第i+1位的情况
for(start = str.begin();start < str.end() - 1;++start){
if(*start > *(start + 1)){
str.erase(start);
flag = 1;
break;
}
}
// 没有第i位大于i+1时,就删除最后几位
if(!flag){
str.erase(str.end() - i,str.end());
break;
}
}
// 去除开头多余的零,比如1023删除1位,结果为023,要删除掉前面的0
for(start = str.begin();start < str.end() - 1;++start){
if('0' == *start){
str.erase(start);
}else{
break;
}
}
return str;
}