文章目录
- 一【题目类别】
- 二【题目难度】
- 三【题目编号】
- 四【题目描述】
- 五【题目示例】
- 六【解题思路】
- 七【题目提示】
- 八【时间频度】
- 九【代码实现】
- 十【提交结果】
一【题目类别】
- 贪心算法
二【题目难度】
- 简单
三【题目编号】
- 1323.6 和 9 组成的最大数字
四【题目描述】
- 给你一个仅由数字 6 和 9 组成的正整数 num。
- 你最多只能翻转一位数字,将 6 变成 9,或者把 9 变成 6 。
- 请返回你可以得到的最大数字。
五【题目示例】
-
示例 1:
- 输入:num = 9669
- 输出:9969
- 解释:
- 改变第一位数字可以得到 6669 。
- 改变第二位数字可以得到 9969 。
- 改变第三位数字可以得到 9699 。
- 改变第四位数字可以得到 9666 。
- 其中最大的数字是 9969 。
-
示例 2:
- 输入:num = 9996
- 输出:9999
- 解释:将最后一位从 6 变到 9,其结果 9999 是最大的数。
-
示例 3:
- 输入:num = 9999
- 输出:9999
- 解释:无需改变就已经是最大的数字了。
六【解题思路】
- 本题思路较简单,只需要从高位向低位搜索,遇到 6 6 6就换成 9 9 9即可,因为高位的值被替换后的值肯定大于低位被替换后的值
- 当然,具体实现可以有两种方法:
- ① 把数字的每一位都取出来,然后从高位到低位扫描,遇到 6 6 6就替换为 9 9 9即可,最后再将数字拼装返回
- ② 从高位到低位扫描,不过采用的方法是取模和除法,遇到 6 6 6就加对应位次的3 k k k( k k k表示对应位次 0 0 0的个数),这样也能实现 6 6 6到 9 9 9的转换
- 最后返回结果即可
七【题目提示】
- 1 < = n u m < = 1 0 4 1 <= num <= 10^4 1<=num<=104
- n u m 每一位上的数字都是 6 或者 9 。 num 每一位上的数字都是 6 或者 9 。 num每一位上的数字都是6或者9。
八【时间频度】
- 时间复杂度: O ( 1 ) O(1) O(1)
- 空间复杂度: O ( 1 ) O(1) O(1)
九【代码实现】
- Java语言版
class Solution {
public int maximum69Number (int num) {
if(num / 1000 == 6){
return num + 3000;
}else if(num % 1000 / 100 == 6){
return num + 300;
}else if(num % 100 / 10 == 6){
return num + 30;
}else if(num % 10 == 6){
return num + 3;
}
return num;
}
}
- C语言版
int maximum69Number (int num)
{
if(num / 1000 == 6)
{
return num + 3000;
}
else if(num % 1000 / 100 == 6)
{
return num + 300;
}
else if(num % 100 / 10 == 6)
{
return num + 30;
}
else if(num % 10 == 6)
{
return num + 3;
}
return num;
}
- Python版
class Solution:
def maximum69Number (self, num: int) -> int:
if num // 1000 == 6:
return num + 3000
elif num % 1000 // 100 == 6:
return num + 300
elif num % 100 // 10 == 6:
return num + 30
elif num % 10 == 6:
return num + 3
return num
十【提交结果】
-
Java语言版
-
C语言版
-
Python语言版