每周一题:6和9组成的最大数字(已更新JS)

题目描述:

给你一个仅由数字 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 。

代码如下:

var maximum69Number  = function(num) {

  let arr=num.toString();
  num = arr.split("");
  let index = arr.indexOf("6");
  num[index] = "9";
  let arrs=num.join("");
  return Number(arrs);

};

通过率:

思路如下

在这道编程题中我们不知道num的具体数值,所幸题目已经给出了限制条件,num全部由6和9组成,不会拥有别的数字。

那么我们该如何找出最大值呢?首先,6和9相比肯定是9比6大,题目中要求只能改动一位数字,所以我们可以尝试寻找数字中的6进行改动从而输出num的最大值。比如输入6996,我们将第一个6改成9就可以输出最大值了,再比如9696,我们也是将第一个6改成9就可以得到最大值9996了。所以这个题目的关键点在于找到正整数中的第一个6

第二步,我们该如何找到第一个数字6呢?首先我们要将正整数转换成数组,因为正整数不好进行操作和改动,在这里我们可以用Number.toString()函数对正整数num进行转化,这个函数的作用更具体为将数字转换为字符串。然后用split()函数将字符串转化为数组重新赋值给num。

接着我们就需要找到第一个6出现的位置,这里就需要利用函数,并借助函数输出数组下标找到这个元素,对其进行更换。这里我们可以使用indexOf() 方法,其作用为返回某个指定的字符串值在字符串中首次出现的位置,输出元素在数组中的位置。然后我们就可以根据数组下标对其元素重新赋值进行更换。

接着我们就需要将改动完成后的数组重新转换为正整数了,首先用join()方法,可以将数组返回一个字符串,用于把数组中的所有元素放入一个字符串中。在这里括号内是可以加标点符号或者是其他分隔符的,但由于我们是需要返回整数,所以用不着在括号内加别的符号。

最后我们再将字符串转化为正整数,这里使用Number() 函数把对象的值转换为数字,然后返回改动后的正整数值。值得注意的是当对象的值无法转换为数字时,Number() 函数返回 NaN。

猜你喜欢

转载自www.cnblogs.com/sayg-1207/p/12882629.html