代码随想录37| 738.单调递增的数字 、贪心算法总结

本文介绍了一个编程问题,如何将给定的数字转换为单调递增的表示法。通过itoa函数将数字转为字符数组,然后使用贪心策略调整数组元素,确保满足递增条件。最后,总结了贪心算法在解决这类问题中的应用和策略
摘要由CSDN通过智能技术生成

738. 单调递增的数字

这道题其实就是看给出的数字的各个位上的数字是否为递增的,如果为递增,就直接不变,不是的话,就输出比它小的最大递增数字(其实就是最大位减一,然后其余位变成9)

为什么会有flag这个量出现?直接修改不行嘛?

——不行,假如1000的话,直接修改的话会是900,因为条件中不包含等于,但这不是最大的

void itoa(int num, char* str, int* strSize){
    *strSize = 0;
    while(num > 0){
        str[(*strSize)++] = num % 10 + '0';
        num /= 10;
    }
    for(int i = 0; i < (*strSize)/2; i++){
        int temp = str[i];
        str[i] = str[(*strSize) - 1 - i];
        str[(*strSize) - 1 - i] = temp;
    }
    str[* strSize] ='\0';
}
int monotoneIncreasingDigits(int n) {
    int strNSize;
    char strN[11];
    itoa(n, strN, &strNSize);
    int flag = strNSize;
    for(int i = strNSize - 1; i > 0; i--){
        if(strN[i - 1] > strN[i]){
            flag = i;
            strN[i - 1]--;
        }
    }
    for(int i = flag; i < strNSize; i++){
        strN[i] = '9';
    }
    return atoi(strN);
}

贪心算法总结

贪心算法没有套路可以讲,更多是看人对问题的思考,这里其实通过大量题目练习后,然后找到了了一种思路,我觉得贪心算法就是解决方法中比较巧妙的解题方法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值