题目描述
给你一个仅由数字 6 和 9 组成的正整数 num
。
你最多只能翻转一位数字,将 6 变成 9,或者把 9 变成 6。
请返回你可以得到的最大数字。
样例
输入:num = 9669
输出:9969
解释:
改变第一位数字可以得到 6669 。
改变第二位数字可以得到 9969 。
改变第三位数字可以得到 9699 。
改变第四位数字可以得到 9666 。
其中最大的数字是 9969 。
输入:num = 9996
输出:9999
解释:将最后一位从 6 变到 9,其结果 9999 是最大的数。
输入:num = 9999
输出:9999
解释:无需改变就已经是最大的数字了。
限制
1 <= num <= 10^4
num
每一位上的数字都是 6 或者 9。
算法
(贪心) $O(\log n)$
- 将原数字转换为字符串,从第一位开始向后找第一个 6,找到了就替换为 9 然后返回。找不到就直接返回。
时间复杂度
- 扫一遍数字的每一位,时间复杂度为 $O(\log n)$。
空间复杂度
- 需要额外 $O(\log n)$ 的空间存放数字的字符串形式。
C++ 代码
class Solution {
public:
int maximum69Number (int num) {
string s = to_string(num);
for (int i = 0; i < s.length(); i++)
if (s[i] == '6') {
s[i] = 9;
break;
}
return stoi(s);
}
};