leetcode刷题.402. 移掉K位数字.每日打卡

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

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

代码:(应该可以写的更加优雅一些)

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);
    }
};

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值