前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >263. 丑数

263. 丑数

作者头像
lucifer210
发布2019-09-05 18:47:13
4890
发布2019-09-05 18:47:13
举报
文章被收录于专栏:脑洞前端

题目描述

编写一个程序判断给定的数是否为丑数。

丑数就是只包含质因数 2, 3, 5 的正整数。

示例 1:

代码语言:javascript
复制
输入: 6
输出: true
解释: 6 = 2 × 3

示例 2:

代码语言:javascript
复制
输入: 8
输出: true
解释: 8 = 2 × 2 × 2

示例 3:

代码语言:javascript
复制
输入: 14
输出: false 
解释: 14 不是丑数,因为它包含了另外一个质因数 7。

说明:

1 是丑数。输入不会超过 32 位有符号整数的范围: [−231, 231 − 1]。

来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/ugly-number 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

思路

题目要求给定一个数字,判断是否为“丑陋数”(ugly number), 丑陋数是指只包含质因子2, 3, 5的正整数。

根据定义,我们将给定数字除以2、3、5(顺序无所谓),直到无法整除。如果得到1,说明是所有因子都是2或3或5,如果不是1,则不是丑陋数。

这就好像我们判断一个数字是否为n(n为大于1的正整数)的幂次方一样,我们只需要 不断除以n,直到无法整除,如果得到1,那么就是n的幂次方。这道题的不同在于 它不再是某一个数字的幂次方,而是三个数字(2,3,5),不过解题思路还是一样的。

转化为代码可以是:

代码语言:javascript
复制
while(num % 2 === 0)   num = num / 2;
  while(num % 3 === 0)   num = num / 3;
  while(num % 5 === 0)   num = num / 5;

  return num === 1;

我下方给出的代码是用了递归实现,只是给大家看下不同的写法而已。

关键点

  • 数论
  • 因数分解

代码

代码语言:javascript
复制
/*
 * @lc app=leetcode id=263 lang=javascript
 *
 * [263] Ugly Number
 */
/**
 * @param {number} num
 * @return {boolean}
 */
var isUgly = function(num) {
  // TAG: 数论
  if (num <= 0) return false;
  if (num === 1) return true;

  const list = [2, 3, 5];

  if (list.includes(num)) return true;

  for (let i of list) {
    if (num % i === 0) return isUgly(Math.floor(num / i));
  }
  return false;
};
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-09-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 脑洞前端 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 题目描述
  • 思路
  • 关键点
  • 代码
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档