博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
leetcode-263-Ugly Number
阅读量:6207 次
发布时间:2019-06-21

本文共 1344 字,大约阅读时间需要 4 分钟。

题目描述:

Write a program to check whether a given number is an ugly number.

Ugly numbers are positive numbers whose prime factors only include 2, 3, 5. For example, 6, 8 are ugly while 14 is not ugly since it includes another prime factor 7.

Note:

  1. 1 is typically treated as an ugly number.
  2. Input is within the 32-bit signed integer range.

 

要完成的函数:

bool isUgly(int num) 

 

说明:

1、这道题目不难理解。一个只包括2、3、5的素数因子的正数是ugly number,1特别处理为ugly number。输入是一个32位的有符号型整数。

2、首先我们在想这道题目能不能不断地整除2、整除3、整除5,最后等于1,就判断是一个ugly number。如果整除完还是不等于1,就不是ugly number。

但题目中说的是素数因子,那要是包含一些非素数因子,比如偶数、奇数中的合数呢?

偶数不用说,总是能整除2的。奇数中的合数,也是由素数相乘而构成的,比如15=3*5,27=3*3*3,21=3*7,所以奇数中的合数也能不断地整除2、整除3、整除5,然后看是不是最终等于1来判断。

所以这道题目,按照我们最开始的思路,是可以处理的。

代码如下:

bool isUgly(int num)     {        if(num<=0)//边界条件处理            return false;        while(num%2==0)   num>>=1;//位操作更加便于计算机处理,且更快        while(num%3==0)   num/=3;        while(num%5==0)   num/=5;        return num==1;//如果num==1,那么直接返回true    }

实测6ms,beats 77.79% of cpp submissions。

 

3、受到昨天那道“判断一个数是不是2的整数次幂”的题目的启发,笔者在想能不能找到一个最大的整数,它包含了2、3、5的因子,然后判断这个最大整数能否整除num,从而判断是不是ugly number。

但是这个最大整数必定是远远超过int型整数所能表示的范围,它需要30个2的因子(int型整数所能拥有最多的2因子),19个3的因子(int型整数所能拥有最多的3因子),13个5的因子(int型整数所能拥有最多的5因子)。

接着判断这个最大整数是否能整除num,就可以做出一个时间复杂度为O(1)的判断了,只需要做一次大数除法。

不过大数除法似乎本身时间复杂度也挺高的……可能到最后实际上还没有2中的做法快。

个人的一点想法。

 

转载于:https://www.cnblogs.com/chenjx85/p/8847373.html

你可能感兴趣的文章
页面广告飘窗
查看>>
MySQL性能优化的最佳20+条经验 【转】
查看>>
自适应滤波:矩阵求逆
查看>>
SVN--从本地检出项目至服务器报错--禁止访问
查看>>
[LeetCode] Remove Invalid Parentheses
查看>>
3年外包码农近期烦心事
查看>>
如何用Fritzing实现元器件自定义接线图
查看>>
Educational Codeforces Round 37-E.Connected Components?题解
查看>>
4.13.2
查看>>
移动端图片处理
查看>>
使用FIDDER 抓包构建请求
查看>>
Linux误删文件挽救
查看>>
MongoDB整理笔记の体系架构
查看>>
HTML5 Web 客户端五种离线存储方式汇总
查看>>
石子博弈
查看>>
select Option(增加,删除,清空)
查看>>
centos7 mysql数据库的安装与使用
查看>>
四: 使用vue搭建网站前端页面
查看>>
四:DRF项目开发的准备
查看>>
Linux 进程管理
查看>>