
代码:(应该可以写的更加优雅一些)
class Solution {
public:
string minNumberString(string num, int lefts) {
/* 如果预留0长度,则返回空 */
if(0 == lefts)
return "";
/* 剩下的字符串长度和预留字符相等,则不能再剔除字符串,直接返回整个字符串 */
if(num.length() == lefts) {
return num;
}
int minIdx = 0;
char minCh = num[0];
int searchRange = num.length() - lefts + 1;
for(int i = 0; i < searchRange; i++) {
if(num[i] < minCh) {
minCh = num[i];
minIdx = i;
}
}
/* 递归子字符串 */
return minCh + minNumberString(num.substr(minIdx + 1), lefts - 1);
}
string removeKdigits(string num, int k) {
int validIndex = 0;
string output = minNumberString(num, num.length() - k);
/* 在预留字符串为空的情况下是需要返回'0'的 */
if(output.empty())
return "0";
/* 去除头部的'0'字符串 */
while(validIndex < output.length() - 1 && output[validIndex] == '0')
validIndex++;
return output.substr(validIndex);
}
};

本文探讨了一种优雅重构字符串处理类的方法,重点在于如何构造minNumberString函数,递归地找到并移除指定长度的最小字符,以及removeKdigits函数,用于从输入数字字符串中移除k个最小的数字。实现过程中涉及字符串裁剪和最小值查找技巧。

被折叠的 条评论
为什么被折叠?



