6 和 9 组成的最大数字

315 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第14天,点击查看活动详情

题目描述

给你一个仅由数字 6 和 9 组成的正整数 num
你最多只能翻转一位数字,将 6 变成 9,或者把 9 变成 6 。
请返回你可以得到的最大数字。 来源:力扣(LeetCode)

  • 示例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 。

思路分析

据题意可知,这道题给出了一个数字,这个数字只能由6和9组成的正整数,可以两个数字其中一个组成,也可以两个数字一起组成;在提示里面给出了限制,1<=num<=10000,所以,num最小能是6,最大能是9999;题目要求将给出的数字num中的其中一个数字转换一下,可以把6翻转成9,也可以把9翻转成6,只要返回的数字是翻转后最大的数字就可以了。当然,如果几个数字都是9组成的,那就没必要翻转,因为无论怎么翻转,还是不翻转的时候数字最大,直接返回原来的那个就可以。如果数字有6组成的,那就位数最高的那个6给翻转了,翻转后的这个数绝对是最大的。首先将这个数字转化成字符串,然后在转成数组,循环这个数组,若是遇到6就将第一个6转成9,然后停止循环,将得到的数组转换成数字返回出来。

AC代码

let num = 6999;
function solution(num) {
    let arr = Array.from(num.toString());
    for(let i=0; i<arr.length; i++) {
        if(arr[i] == 6) {
            arr[i] = 9;
            break;
        }
    }
    console.log(Number(arr.join('')))
}
solution(num);

总结