这道题是基于一种贪心的思想去做的。
题目里说去掉一位所给的数,使得去掉之后的数值最大,那只要最高的一位数等于题目要求的数且比下一位数小,那么这个数就是我们要去掉的数,此时去掉这个数肯定能保证所得到的数最大,这个也是小编第一遍for循环遍历的作用,如果找到,直接返回即可。
但是如果后面的数都要比要去掉的数小时,那第一层for循环将不起作用,此时就要从后往前找第一个与要去掉的数相等的数,此时就有第二层for循环,找到第一个要删除的数删除即可。
代码中,-'0'这一步是将字符型转成整形,其实不转也可以比较,这一步有点多余,erase这个类方法是删除指定字符,不清楚的友友可以上网自学一下,希望大家从我这篇题解中有所收获
class Solution {
public:string removeDigit(string number, char digit) {int n=number.size();int i;for(i=0;i<n-1;i++){if(number[i]-'0'== digit-'0' && number[i+1]-'0'>digit-'0'){number.erase(i,1);return number;}}for(i=n-1;i>=0;i--){if(number[i]-'0'== digit-'0'){number.erase(i,1);break;}}return number;}
};