关闭

丑数

标签: lintcode数学
739人阅读 评论(0) 收藏 举报
分类:

题目描述:写一个程序来检测一个整数是不是丑数。丑数的定义是,只包含质因子 2, 3, 5 的正整数。比如 6, 8 就是丑数,但是 14 不是丑数以为他包含了质因子 7。可以认为 1 是一个特殊的丑数。


样例:

给出 num = 8,返回 true。

给出 num = 14,返回 false。


显然,这是一个新颖的概念,在传统的数学概念里,找不到“丑数”这个概念,但是这种新概念的题目有时反而不难,只需要仔细分析其定义即可。


根据定义,丑数是只包含质因子2,3,5的正整数。那么不妨可以由以下4步来判定一个整数是不是丑数:

1. 判断正负:若是负数,可直接返回False

2. 不断除2,直到商还是整数的一次为最后一次

3. 对2步结束后的值,不断除3,直到商还是整数的一次为最后一次

4. 对3步结束后的值,不断除5,直到商还是整数的一次为最后一次


此时,我们看4步结束后的值是不是1:是1,则说明是丑数;不是1,则说明不是丑数。


思路再清晰不过了,给出代码:

class Solution:
    # @param {int} num an integer
    # @return {boolean} true if num is an ugly number or false
    def isUgly(self, num):
        if num <= 0:
            return False
        while num % 2 == 0:
            num = num / 2
        while num % 3 == 0:
            num = num / 3
        while num % 5 == 0:
            num = num / 5
        if num == 1:
            return True
        else:
            return False


0
0
查看评论

丑数问题及变种小结

丑数问题及变种小结丑数问题及变种小结 声明 判断丑数 找出第k大丑数 丑数推论 1 解法1OnlognOnlog n时间复杂度 2 解法2OnOn时间复杂度 找出第k大自定义丑数 1 解法1Onlog n时间复杂度声明文章均为本人技术笔记,转载请注明出处: [1] https://segment...
  • J_Dark
  • J_Dark
  • 2017-06-04 14:48
  • 196

面试题之丑数的C++实现求解(孤陋寡闻了,才知道丑数这么high的东东)

问题描述:      我们把只包含因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含因子7。习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第1500个丑数。(昨天突然发现个不错的博客:http://blog....
  • coder_xia
  • coder_xia
  • 2011-08-22 13:42
  • 21103

C\C++编程题之寻找丑数

丑数的定义:丑数是指那些因子只含2,3,5的数,为方便起见,1也视为丑数
  • yang_teng_
  • yang_teng_
  • 2015-08-19 17:17
  • 432

微软100题(64)寻找第1500个丑数

题目:我们把只包含因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数, 但14不是,因为它包含因子7。习惯上我们把1当做是第一个丑数。 求按从小到大的顺序的第1500个丑数。 思路: 最直观的方法,逐一判断是不是丑数,知道找到1500个丑数 bool is...
  • liuqing0517
  • liuqing0517
  • 2015-06-03 11:38
  • 779

lintcode 4.丑数 II(优先队列)

设计一个算法,找出只含素因子2,3,5 的第 n 大的数。 符合条件的数如:1, 2, 3, 4, 5, 6, 8, 9, 10, 12... 看到题的第一个想法一直向下枚举 直到找到第N个数 我的思路是 :每一个丑数都是由一个丑数乘2乘3乘5得来的,可以把第一个丑数...
  • dlnumk
  • dlnumk
  • 2017-06-06 20:46
  • 248

丑数 简单的优先队列和set

Ugly numbers are numbers whose only prime factors are 2, 3 or 5. The sequence 1, 2, 3, 4, 5, 6, 8, 9, 10, 12, ... shows the first 10 ugly numbers...
  • moon548834
  • moon548834
  • 2017-02-27 19:15
  • 132

【剑指offer】丑数

思路:最简单的方法就是先通过将一个数不断除以2,3,5来判定该数是不是丑数,而后在从1开始,依次往后判断每个数是不是丑数,并记下丑数的个数,这样当计算的个数为给定值时,便是需要求的第n个丑数,这种方法的时间复杂度为O(k),这里的k为第n个丑数的大小,比如第1500个丑数的大小为859963392,...
  • mmc_maodun
  • mmc_maodun
  • 2014-05-30 08:50
  • 4767

两种方法求丑数

我们把只包含因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含因子7。 方法1 : 暴力破解,逐个判断 代码: #include #include using namespace std; //判断是否是丑数 bool isUgly(...
  • buyingfei888
  • buyingfei888
  • 2014-08-04 21:06
  • 990

LintCode笔记(8)——丑数II

Ugly number is a number that only have factors 2, 3 and 5. Design an algorithm to find the nth ugly number. The first 10 ugly...
  • lhanchao
  • lhanchao
  • 2016-08-01 08:28
  • 1705

LintCode 4 丑数II

题目:nthUglyNumber要求:设计一个算法,找出只含素因子2,3,5 的第 n 大的数。 符合条件的数如:1, 2, 3, 4, 5, 6, 8, 9, 10, 12... 注意事项 1.我们可以认为1也是一个丑数样例 如果n = 9, 返回 10算法要求:要求时间复杂度为O(nlo...
  • linglian0522
  • linglian0522
  • 2017-02-15 13:37
  • 435
    个人资料
    • 访问:204215次
    • 积分:4091
    • 等级:
    • 排名:第8970名
    • 原创:212篇
    • 转载:0篇
    • 译文:0篇
    • 评论:39条
    博客专栏
    文章分类
    最新评论