题目:
给你一个仅由数字 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
解释:无需改变就已经是最大的数字了。
C语言:
思路1:暴力法
int maximum69Number (int num)
{
switch(num){
case 6: return 9;
case 9: return 9;
case 66: return 96;
case 69: return 99;
case 96: return 99;
case 99: return 99;
case 666: return 966;
case 669: return 969;
case 696: return 996;
case 699: return 999;
case 966: return 996;
case 969: return 999;
case 996: return 999;
case 999: return 999;
case 6666: return 9666;
case 6669: return 9669;
case 6696: return 9696;
case 6699: return 9699;
case 6966: return 9966;
case 6969: return 9969;
case 6996: return 9996;
case 6999: return 9999;
case 9666: return 9966;
case 9669: return 9969;
case 9696: return 9996;
case 9699: return 9999;
case 9966: return 9996;
case 9969: return 9999;
case 9996: return 9999;
case 9999: return 9999;
}
return 0;
}
执行用时0ms,内存消耗5.4MB。
思路2:计算法。
int maximum69Number (int num)
{
if(num/1000 == 6)
return num+3000;
if(((num-9000) /100 == 6) || ((num/100) == 6))
return num+300;
if(((num-9900) /10 == 6) || ((num-900)/10 == 6) || (num/10 == 6))
return num+30;
if(((num-9990) == 6) || ((num-990)==6) || ((num-90)==6) || (num==6))
return num+3;
return num;
}
执行用时0ms,内存消耗5.4MB。
Python3:
思路:先转化成列表,更改列表项,再转成数字
class Solution:
def maximum69Number (self, num: int) -> int:
x = list(str(num))
for i in range(len(x)):
if(x[i] == '6'):
x[i] = '9'
break
return int(''.join(x))
执行用时28ms,内存消耗15MB。