[路飞]_LeetCode题263丑数

153 阅读1分钟

题目描述

给你一个整数 n ,请你判断 n 是否为 丑数 。如果是,返回 true ;否则,返回 false 。

丑数 就是只包含质因数 2、3 和/或 5 的正整数。

 

示例 1:

输入:n = 6 输出:true 解释:6 = 2 × 3 示例 2:

输入:n = 8 输出:true 解释:8 = 2 × 2 × 2 示例 3:

输入:n = 14 输出:false 解释:14 不是丑数,因为它包含了另外一个质因数 7 。 示例 4:

输入:n = 1 输出:true 解释:1 通常被视为丑数。  

提示:

-2^31 <= n <= 2^31 - 1 来源:力扣(LeetCode) 链接:leetcode-cn.com/problems/ug… 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

题解思路

  1. 任何一个丑数都是由==>丑数=2k2^k3k3^k5k5^k,k是非负整数。
  2. 最小的丑数应该是202^0303^0505^0=1。
  3. 所以对于非正整数的n来说都不是丑数。
  4. 只要n可以分解成2×2×2×2...×3×3×3×3...×5×5×5×5...就是一个丑数。
  5. 我们可以通过除法对n整除,直到n被除剩1、2、3、5中的一个说明n为丑数。
  6. 整除期间如果除完结果不能被2,3,5中任何一个数整除,说明不是一个丑数。

题解代码

 * @lc app=leetcode.cn id=263 lang=javascript
 *
 * [263] 丑数
 */

// @lc code=start
/**
 * @param {number} n
 * @return {boolean}
 */
var isUgly = function(n) {
  if (n <= 0) return false;
  while (true) {
    //n除到剩1或2或3或5时即为最小质数了,说明是丑数
    if (n===1 || n===2 || n===3 || n===5) {
      return true;
    }
    //可以被2/3/5整除就取整除结果继续,如果都不会被整除即说明n不是丑数
    if (n%2 === 0) {
      n /= 2;
    }else if (n%3 === 0) {
      n /= 3;
    }else if (n%5 === 0) {
      n /= 5;
    }else{
      return false;
    }
  }
};
// @lc code=end