2566、替换一个数字后的最大差值

题目:

2566、替换一个数字后的最大差值_第1张图片

 解答:

        显然。最小数是将首位以及与首位相同价格的数字替换为0。但是最大数不能这么做,因为首位可能本身为9,也可能高位有连续的9.
        比如99123,替换后最大应该为99923,将百位的1替换为9。
        也就是说,替换的是高位的第一个非9数字以及与它相同的数字。这样,用纯数学计算很麻烦。要计算数组长度,不断求余然后返回去操作替换。
        简单的做法是直接转换为str字符串,查找第一个不为‘9’的字符,然后从那个字符开始全部替换该字符为9,再转换为int类型。

        用到的库函数int stoi(const string& str, size_t* idx = 0, int base = 10);
        stoi(要替换的字符串,转换结束的位置,进制)
        stoi()使用
        range::replace是std::replace的范围版本,遍历范围,在原来的地方将旧值替换为新值。
        range::replace(r,old_value,new_value)
        range::replace

class Solution {
public:
    int minMaxDifference(int num) {
        string s = to_string(num);
        int max=num;
        for(char c:s){
            if(c!='9'){
                string temp = s;
                ranges::replace(temp,c,'9');
                max=stoi(temp);
                break;
            }
        }
        
        char s0=s[0];
        ranges::replace(s,s0,'0');
        int min=stoi(s);

        return max-min;
    }

时间复杂度O(lognum),空间复杂度O(lognum),其实lognum就是计算num的位数 

你可能感兴趣的:(leetcode,算法)