算法题每日一练---第76天:丑数 l

简介: 丑数 就是只包含质因数 2、3 和 5 的正整数。

3.png

一、问题描述


丑数 就是只包含质因数 235 的正整数。

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


题目链接:丑数 l

二、题目要求


样例 1

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


样例 2

输入: n = 1
输出: true
解释: 1 没有质因数,因此它的全部质因数是 {2, 3, 5} 的空集。


考察

贪心、模拟
建议用时15~35min


三、问题分析


这一题其实简单判断就行了,比如我一开始的想法就是看看这个数字能否被若干个 2 3 5相乘得到,如果可以的话,就返回true,否则返回false

我最初写的代码有点长,但很容易理解。

后来发现,这种方法还可以优化,三重循环嵌套太差劲了。

优化

思想还是这一个思想,只不过是把三重循环分成各自独立的。

n是2的倍数,进入循环/2n是3的倍数,进入循环/3n是5的倍数,进入循环/5


四、编码实现


1.初始版本

classSolution {
public:
boolisUgly(intn) {//(●>ω<●)inti,j,k,a,b,c;//初始化数据for(i=0;pow(2,i)<=n;i++)//判断有几个2        {
a=pow(2,i);
for(j=0;pow(3,j)<=n/a;j++)//判断有几个3            {
b=pow(3,j);
for(k=0;pow(5,k)<=n/(a*b);k++)//判断有几个5                {
c=pow(5,k);
if(a*b*c==n)//如果能够构成,返回truereturntrue;
                }
            }
        }
returnfalse;//不能构成,返回false    }
};


2.优化后

classSolution {
public:
boolisUgly(intn) {
if(n<1) returnfalse;//n为0,返回falsewhile(n%2==0)   n=n/2;//进入2循环while(n%3==0)   n=n/3;//进入3循环while(n%5==0)   n=n/5;//进入5循环if(n==1)//结果是1,那么肯定能被2 3 5组成returntrue;
else//否则不能returnfalse;
    }
};


五、测试结果

7.png

优化后的执行用时明显低了。

相关文章
|
算法 前端开发
前端算法-丑数
前端算法-丑数
|
存储 算法 C++
【每日算法Day 81】面试经典题:关于丑数,你真的理解为什么这么算吗?
【每日算法Day 81】面试经典题:关于丑数,你真的理解为什么这么算吗?
|
算法 C++
|
算法
算法题每日一练---第78天:二分查找
给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target
168 1
算法题每日一练---第78天:二分查找
|
存储 算法
|
算法 C++
算法题每日一练---第67天:无重复字符的最长子串
给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。
115 0
算法题每日一练---第67天:无重复字符的最长子串
|
算法
算法题每日一练---第65天:螺旋矩阵 II
给你一个正整数 n ,生成一个包含 1 到 n2 所有元素
106 1
算法题每日一练---第65天:螺旋矩阵 II
|
算法
【刷算法】丑数
【刷算法】丑数
|
算法
算法题每日一练---第75天:Nim 游戏
你和你的朋友,两个人一起玩 Nim 游戏。
307 0
算法题每日一练---第75天:Nim 游戏
|
算法
算法题每日一练---第74天:快乐数
编写一个算法来判断一个数 n 是不是快乐数。
172 0
算法题每日一练---第74天:快乐数

热门文章

最新文章