LEETCODE 1323. Maximum 69 Number 解题思路分析

题目大意:

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

提示:

  • 1 <= num <= 10^4
  • num 每一位上的数字都是 6 或者 9 。

如果想查看本题目是哪家公司的面试题,请参考以下免费链接: https://leetcode.jp/problemdetail.php?id=1323

解题思路分析:

本题难度不大,核心思路是,如果整数num中包含6,那么我们应该将最高位的6更改为9即是最优解。对于简单题,我们应该对代码质量提出更高的要求,类似本题这种能使用数字解题的尽量不要使用字符串去寻找数字6。

之前的文章多次讲过如何找数字每一位上的数。我们计算num与10的余数,即是当前num最低位上的数值,之后将num除以1o,再求它与10的余数即是次低位上的数值,以此类推。

解题时,我们从低位向高位循环查看每一位上的数字,另外使用一个变量index来表示当前位。index的默认值为1。再使用一个maxIndex代表6出现的最高位。如果当前位是6,更新 maxIndex 等于index,每循环完一位数,将index变成 index *10。

得到6所在的最高位之后,使用num + maxIndex * 3即可将该位数字变为9。

实现代码:

public int maximum69Number (int num) {
    int maxIndex=0; // 数字6所在的最高位
    int n=num; // 当前数字
    int index=1; // 当前位
    while(n>0){ // 循环查看num的每一位上的数字
        // 如果当前位上的数字是6,更新maxIndex为index
        if(n%10==6) maxIndex=index;
        // index乘以10
        index*=10;
        // 当前数字除以10
        n/=10;
    }
    // 将最高位上的6加3变成9
    num+=3*maxIndex;
    return num;
}

本题解法执行时间为0ms。

Runtime: 0 ms, faster than 100.00% of Java online submissions for Maximum 69 Number.

Memory Usage: 38.7 MB, less than 100.00% of Java online submissions for Maximum 69 Number.

本网站文章均为原创内容,并可随意转载,但请标明本文链接
本文链接: https://leetcode.jp/leetcode-1323-maximum-69-number-解题思路分析/
此条目发表在leetcode分类目录,贴了, , 标签。将固定链接加入收藏夹。

发表评论

电子邮件地址不会被公开。