难度:⭐
题目描述:
给你一个仅由数字 6 和 9 组成的正整数 num
。
你最多只能翻转一位数字,将 6 变成 9,或者把 9 变成 6 。
请返回你可以得到的最大数字。
示例1:
1 | 输入:num = 9669 |
示例2:
1 | 输入:num = 9996 |
示例3:
1 | 输入:num = 9999 |
提示:
1 <= num <= 10^4
num
每一位上的数字都是 6 或者 9 。
解题过程:
思路:
将整数转成字符串,若存在字符’6’,则把左边第一个字符’6’变成’9’,这样可以得到最大数字。
c++代码:(执行用时0ms,击败100.00%,内存消耗6.1M,击败29.03%)
1 | class Solution { |
官方题解:
方法一: 模拟
现在把 9
翻转成 6
是不合理的,因为它会使得数字变小。因此我们应当找到 num
中最高位的 6
,将其翻转成 9
。
c++代码:(执行用时0ms,击败100.00%,内存消耗6.2M,击败11.53%)
1 | class Solution { |
复杂度分析
时间复杂度:$O(\log \textit{num})$,表示 $\textit{num}$ 的位数。
空间复杂度:$O(\log \textit{num})$。为了代码编写方便,我们使用额外的字符串来存储 $\textit{num}$,使得可以直接修改特定位置的数字。
知识点:
atoi()和stoi()的区别
相同点:
- 都是C++字符处理函数,把数字字符串转换成int输出
- 头文件都是#include\
不同点:
- atoi()的参数是 const char ,因此对于一个字符串str我们必须调用 c_str()的方法把这个string转换成 const char\类型的,而stoi()的参数是const string*,不需要转化为 const char*;
- stoi()会做范围检查,默认范围是在int的范围内的,如果超出范围的话则会runtime error!而atoi()不会做范围检查,如果超出范围的话,超出上界,则输出上界,超出下界,则输出下界;
总结:
模拟解题,需要注意字符串转整数的两个函数stoi()和atoi()的使用。