题目大意:
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.
本网站文章均为原创内容,并可随意转载,但请标明本文链接如有任何疑问可在文章底部留言。为了防止恶意评论,本博客现已开启留言审核功能。但是博主会在后台第一时间看到您的留言,并会在第一时间对您的留言进行回复!欢迎交流!
本文链接: http://leetcode.jp/leetcode-1323-maximum-69-number-解题思路分析/