LeetCode6 和 9 组成的最大数字

100 篇文章 2 订阅
这篇博客讨论了一道LeetCode题目,要求通过翻转数字6和9来最大化给定的整数。解决方案涉及对数字进行位操作,寻找最左边的6并将其替换为9。文中提供了两种不同的实现方法,一种是通过除法和取余操作,另一种是将数字转换为字符数组。博主强调了深入思考和精确判断的重要性,即使在看似简单的题目中。
摘要由CSDN通过智能技术生成

6 和 9 组成的最大数字

给你一个仅由数字 6 和 9 组成的正整数 num。

你最多只能翻转一位数字,将 6 变成 9,或者把 9 变成 6 。

请返回你可以得到的最大数字。

示例 1:

输入:num = 9669
输出:9969
解释: 改变第一位数字可以得到 6669 。
改变第二位数字可以得到 9969 。
改变第三位数字可以得到 9699 。
改变第四位数字可以得到 9666 。
其中最大的数字是 9969 。

来源:LeetCode

一定要将思路想清楚了,走一遍代码,才能知道到底哪里出了错误。

首先对数进行分析,当然是将最左侧的数值换成9最好,但前提是找到最左侧的6.
提取最高位的数值的方法就是除以1000,100,10。(当然,结束条件不能以k是否为1作为结束标准,当所给数值最低位为6时,k=1时结束了就会造成数值漏加)

k初始值为1000,先num/k,判断最高位是否是6,如果是6,就将其转换为9,具体表现就是9*k,然后再加上num对k取余之后的数,即剩下的数不变,就可以得到最终的数,并跳出当前循环。

如果首位不是6,那么就需要判断下一位,这个时候n也应该加上9*k,然后将num赋值为num对k取余之后的值,相应k/10,判断下一位。

但是但是,一定要注意,使用这种方法的时候,当num/k为0的时候呢,n会加上本来不应该有的最高的位数,所以,直接将9*k改为(num/k)*k,这样,就是正确的了。

class Solution {
    public int maximum69Number (int num) {
        int n = 0;
        int k=1000;
        while(num!=0){  
            if(num/k==6){
                n+=9*k+num%k;
                break;
            }
            else{
                n+=(num/k)*k;
            }
            num=num%k;
            k/=10;
        }
        return n;
    }
}

在if-else语句中还可以再加上点东西,使得判断更精确,当num/k为0的时候,就是num和k发生变化。

class Solution {
    public int maximum69Number (int num) {
        int n = 0;
        int k=1000;
        while(num!=0){
            if(num/k==6){
                n+=9*k+num%k;
                break;
            }
            else if(num/k==0){
                num=num%k;
                k/=10;
            }
            else{
                n+=9*k;
                num=num%k;
                k/=10;
            }   
        }
        return n;
    }
}

当然还有其他的方法,可以将所给数值转换成字符数组,然后判断字符是否为‘6’或者‘9’,判断出来之后,直接进行修改就好,思路不想上面的方法那么复杂,因为转换的字符数组与数组分解开的位数是对应的。

看上去是简单题,但其实还是需要深入思考的。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值