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 变 9return num;}digit /= 10;//最高位不为6,继续低一位进行判断}return num;}
};