LeetCode每日一题 - 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
解释:无需改变就已经是最大的数字了。

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。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值