LeetCode算法题-Ugly Number(Java实现-四种解法)
这是悦乐书的第199次更新,第208篇原创
01 看题和准备
今天介绍的是LeetCode算法题中Easy级别的第64题(顺位题号是263)。编写一个程序来检查给定的数字是否是一个丑陋的数字。丑陋的数字是正数,其主要因子仅包括2,3,5。例如:
输入:6
输出:true
说明:6 = 2×3
输入:8
输出:true
说明:8 = 2×2×2
输入:14
输出:false
说明:14并不丑陋,因为它包含另一个因子7。
注意:
1通常被视为丑陋的数字。
输入在32位有符号整数范围内:[ -2^31, 2^31 - 1]。
本次解题使用的开发工具是eclipse,jdk使用的版本是1.8,环境是win7 64位系统,使用Java语言编写和测试。
02 第一种解法
特殊情况:1是丑陋数字,小于等于0的不是丑陋数字。
正常情况:num如果是丑陋数字,可以分为两种情况:一是单纯的某一因子的幂次方,二是三个因子的随机排列组合,可能两个一起出现,也有可能三个一起出现。除以这三个因子中的一个,最后商是1,则说明这个数是丑陋数字;除以这三个因子中的两个或三个,最后商是1,那么这个数也是丑陋数字。
对此,使用两层循环,外层循环控制因子,从2开始,一直到5,中间有个4其实就是2的平方,也可以算作其中的一个因子,内层循环先判断对当前因子取余是否等于0,如果不等于0则说明可能是另外的因子的积,也有可能不是丑陋数字,如果等于0,则除以当前因子获取商,重新赋值给num,继续判断和循环。
public boolean isUgly(int num) {
if (num > 0) {
for (int i = 2; i < 6; i++) {
while (num % i == 0) {
num /= i;
}
}
}
return num == 1;
}
03 第二种解法
将2,3,5这三个因子放入数组,使用两层循环,外层依次取出数组中的因子,内层做取余判断和求商,前提条件是num大于0。
public boolean isUgly2(int num) {
if (num > 0) {
int[] arr = {2, 3, 5};
for (int d : arr) {
while (num % d == 0) {
num /= d;
}
}
}
return num == 1;
}
04 第三种解法
也可以分开来计算商,使用3个循环分开判断取余和求商,最后判断num等不等于1。
public boolean isUgly3(int num) {
if (num > 0) {
while (num % 2 == 0) {
num /= 2;
}
while (num % 3 == 0) {
num /= 3;
}
while (num % 5 == 0) {
num /= 5;
}
}
return num == 1;
}
05 第四种解法
使用递归的解法,判断逻辑和上面两种解法一样,对2取余等于0的话,除以2后继续调用自身,对于3和5,情况一样,最后判断是否等于1。
public boolean isUgly4(int num) {
if (num <= 0) {
return false;
}
if (num % 2 == 0) {
return isUgly4(num/=2);
}
if (num % 3 == 0) {
return isUgly4(num/=3);
}
if (num % 5 == 0) {
return isUgly4(num/=5);
}
return num == 1;
}
06 小结
算法专题目前已连续日更超过一个月,算法题文章64+篇,公众号对话框回复【数据结构与算法】、【算法】、【数据结构】中的任一关键词,获取系列文章合集。
以上就是全部内容,如果大家有什么好的解法思路、建议或者其他问题,可以下方留言交流,点赞、留言、转发就是对我最大的回报和支持!
LeetCode算法题-Ugly Number(Java实现-四种解法)的更多相关文章
- LeetCode算法题-Third Maximum Number(Java实现-四种解法)
这是悦乐书的第222次更新,第235篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第89题(顺位题号是414).给定非空的整数数组,返回此数组中的第三个最大数字.如果不存 ...
- LeetCode算法题-Missing Number(Java实现-四种解法)
这是悦乐书的第200次更新,第209篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第65题(顺位题号是268).给定一个包含n个不同数字的数组,取自0,1,2,...,n ...
- LeetCode算法题-Minimum Distance Between BST Nodes(Java实现-四种解法)
这是悦乐书的第314次更新,第335篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第183题(顺位题号是783).给定具有根节点值的二叉搜索树(BST),返回树中任何两个 ...
- LeetCode算法题-Binary Number with Alternating Bits(Java实现)
这是悦乐书的第292次更新,第310篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第160题(顺位题号是693).给定正整数,检查它是否具有交替位:即它的二进制数的任意两 ...
- LeetCode算法题-Perfect Number(Java实现)
这是悦乐书的第249次更新,第262篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第116题(顺位题号是507).我们定义Perfect Number是一个正整数,它等于 ...
- LeetCode算法题-Valid Perfect Square(Java实现-四种解法)
这是悦乐书的第209次更新,第221篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第77题(顺位题号是367).给定正整数num,写一个函数,如果num是一个完美的正方形 ...
- LeetCode算法题-Intersection of Two Arrays(Java实现-四种解法)
这是悦乐书的第207次更新,第219篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第75题(顺位题号是349).给定两个数组,编写一个函数来计算它们的交集.例如: 输入: ...
- LeetCode算法题-Reverse Vowels of a String(Java实现-四种解法)
这是悦乐书的第206次更新,第218篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第74题(顺位题号是345).编写一个函数,它将一个字符串作为输入,并仅反转一个字符串的 ...
- LeetCode算法题-Happy Number(Java实现)
这是悦乐书的第188次更新,第190篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第47题(顺位题号是202).编写算法以确定数字是否"幸福". 幸福 ...
随机推荐
- [转]Angular引入第三方库
本文转自: https://blog.csdn.net/yuzhiqiang_1993/article/details/71215232 版权声明:本文为博主原创文章,转载请注明地址.如果文中有什么纰 ...
- 【转载】阿里云ECS Linux服务器禁止某些IP访问
在阿里云ECS Linux服务器运维过程中,如果发现某些IP访问异常,如怀疑有攻击行为或者怀疑是别人写的爬虫程序长时间占用你的服务器资源,则可以通过相关的设置来禁止这些IP段的访问,拒绝这些IP的请求 ...
- 解码 id_token
简介 id_token是一个特殊的token,在Microsoft Graph的认证和授权过程中颁发,它包含了已认证用户的一些信息.本文将介绍如何通过实例理解id_token,并且演示了如何解码. 准 ...
- mysql+ssl主从复制
一.作为主服务器Master, 会把自己的每一次改动都记录到 二进制日志 Binarylog 中. (从服务器I/O thread会负责来读取master binary log, 然后写入自身rela ...
- 一个smtp发送错误
错误返回: Error: need EHLO and AUTH first ! 原因:服务器是smtp.exmail.qq.com,邮箱账号是企业新申请的邮箱账号,邮箱密码需要重新修改. 解决办法:修 ...
- 【Java每日一题】20170301
20170228问题解析请点击今日问题下方的“[Java每日一题]20170301”查看(问题解析在公众号首发,公众号ID:weknow619) package Mar2017; public cla ...
- 快速排序 and 拉格朗日插值查找
private static void QuictSort(int[] zu, int left, int right) { if (left < right) { ; ; ]; while ( ...
- 在CentOS下面安装hue时报的错
说明:我的系统为CentOS 7 ,系统自带的python版本为2.7.5. 安装hue时,推荐使用2.7.0以上的版本,可以自己查看自己系统自带的版本 若是版本不对,要升级为2.7的版本,这里不再说 ...
- BZOJ3453: tyvj 1858 XLkxc(拉格朗日插值)
题意 题目链接 Sol 把式子拆开,就是求这个东西 \[\sum_{i = 0} ^n \sum_{j = 1}^{a + id} \sum_{x =1}^j x^k \pmod P\] 那么设\(f ...
- loj#6032. 「雅礼集训 2017 Day2」水箱(并查集 贪心 扫描线)
题意 链接 Sol 神仙题+神仙做法%%%%%%%% 我再来复述一遍.. 首先按照\(y\)坐标排序,然后维护一个扫描线从低处往高处考虑. 一个连通块的内状态使用两个变量即可维护\(ans\)表示联通 ...