C++小白修仙记_LeetCode刷题_1323 6 和 9 组成的最大数字

1323. 6 和 9 组成的最大数字

给你一个仅由数字 6 和 9 组成的正整数 num。

你最多只能翻转一位数字,将 6 变成 9,或者把 9 变成 6 。

请返回你可以得到的最大数字。

示例

输入:num = 9669

输出:9969

解释:

改变第一位数字可以得到 6669 。

改变第二位数字可以得到 9969 。

改变第三位数字可以得到 9699 。

改变第四位数字可以得到 9666 。

其中最大的数字是 9969 。

解法:贪心、字符串

class Solution {
public:
    int maximum69Number (int num) {
        string s = to_string(num);

        for(char &ch : s)
        {
            if(ch == '6')
            {
                ch = '9';
                break;
            }
        }

        return atoi(s.c_str());
    }
};

补充将字符串、数字互相转换的函数

int 转 string

通过 std::to_string() 函数转换
通过 ostringstream 转换
通过 sprintf 转换

string 转 int

通过 istringstream 转换
使用 sscanf 来转化
使用 atoi 转换
//int转string
//1.通过 std::to_string()函数转换
#include <iostream>
int main()
{
    int num = 123;
    std::cout << std:: to_string(num);
    return 0;
}
//这种方式在 C++11 中才能使用,编译时记得加上 --std=c++11 的选项

//2.通过ostringstream转换
#include <iostream>
#include <sstream>
int main()
{
    int num = 123;
    std::ostringstream ss;
    ss << num;
    std::cout << ss.str();
    return 0;
}
//这是一种通过字符流的方式将整数转换成字符串,这种方式在C++11之前也可以使用

//3.通过sprintf转换
#include <iostream>
int mian()
{
    int num = 123;
    char buffer[256];
    sprintf(buffer,"%d",num);
    printf("%s",buffer);
    return 0;
}
//这是一种C语言中的转换方式,sprintf 也可以换成更安全的 snprintf 函数

//string转int
//1.通过istringstream转换
#include <iostream>
#include <sstream>
int main()
{
    std::string str = "1000";
    int num = 0;

    std::istringstream ss(str);
    ss >> num;

    std::cout << num;
    return 0;
}
//使用 istringstream 可以从字符流中读取整数,与 ostringstream 是一种相反的操作

//2.使用 sscanf 来转化
#include <iostream>
#include <stdio.h>
int main()
{
    std::string str = "1000";
    int num = 0;

    sscanf(str.c_str(),"%d",&num);
    std::cout << num;
    return 0;
}
//注意 sscanf 函数的第一个参数类型是 const char *,string类型的参数需要用 c_str()函数 转换一下

//3.使用atoi转化
#include <iostream>
#include <stdlib.h>
int main()
{
    std::string str = "1000";
    std::cout << atoi(str.c_str());
    return 0;
}
//atoi 函数的头文件是 stdlib.h,同样是一个C语言中的函数

解法:贪心、数学

思想:digit = 10的 log以10为底以num为真值 的次方 ,代表的是num的位数,如果最高位为6,则变9,如果最高位不是6,则把digit基值除以10,继续判断第一位是否为6,为6的话直接将 num 加 3 * digit,将6改为9,结果即为所求。

class Solution {
public:
    int maximum69Number (int num) {
        int digit = pow(10,(int)log10(num));
        while(digit > 0)
        {
            if((num / digit) % 10 == 6) //最高位等于6
            {
                num += 3 * digit; //最高位 + 3000,最高位 6 变 9
                return num;
            }
            digit /= 10;//最高位不为6,继续低一位进行判断
        }
        return num;
    }
};
posted @ 2025-08-16 23:01  Jaylan  阅读(12)  评论(0)    收藏  举报