问题描述:
给定n位正整数a,去掉其中任意k个数字后,剩下的数字按原次序排列组成⼀个新的正整数。
对于给定的n和k,设计⼀个算法,返回在移除k位后的最小值
解决思路:
贪心算法
欲使得最后的结果最小,那么高位应尽量选择最小的数。
对于最高位,其右边至少需要剩余k-1位,即应选择前n-k位中的最小值(非零),即第addr位数字min,选择区间位[0,n-k];
对于次高位,由于最高位选择了第addr位,那么前addr位不可选取,右侧需保留k-2位,选择区间位[addr,n-k+1];
……
string des(string s,int k)
{
string ans;
int n = s.length()-1;
int addr = -1;
int m = 0;
while(m<=n-k)
{
int min = 9;
for(int i = addr+1;i<n-k+m;++i)
{
if(isdigit(s[i]))
{
if(s[i]-'0'<min)
{
if (!((s[i] == '0' )& (m == 0)))
{
min = s[i] - '0';
addr = i;
}
}
}
}
ans += s[addr];
m++;
}
return ans;
}