这是悦乐书的第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+篇,公众号对话框回复【数据结构与算法】、【算法】、【数据结构】中的任一关键词,获取系列文章合集。

以上就是全部内容,如果大家有什么好的解法思路、建议或者其他问题,可以下方留言交流,点赞、留言、转发就是对我最大的回报和支持!

java算法题解法_LeetCode算法题-Ugly Number(Java实现-四种解法)相关推荐

  1. 算法-寻找数组中的重复值,四种解法

    算法-寻找数组中的重复值 寻找数组中的重复值 寻找数组中的重复值 题目来源于:Leetcode-287.本题归类到简单我无法理解-要满足四个条件需要用很特定的解法,面试中要是用到的话很可能是在给自己挖 ...

  2. 四种解法——求子序列的最大连续子序和(普通解法、求和解法、分治法、O(n)级解法)(面试经典题)

    励志用少的代码做高效表达 在这四种解法里,解法一是通法,可以学到规律和知识,做基础之用:解法二在解法一的基础上做改进,锻炼思维:解法三则是大名鼎鼎的分治法,涉及到递归的知识,算是"高效算法设 ...

  3. python整数拆分dp算法_整数拆分问题的四种解法【转载】

    http://blog.csdn.net/u011889952/article/details/44813593 整数拆分问题的四种解法 原创 2015年04月01日 21:17:09 整数划分问题是 ...

  4. 奖券数目c语言答案,2015 年蓝桥杯 C 语言 B 组省赛第 1 题: 奖券数目 (四种解法 + 详细分析)...

    题目 奖券数目 有些人很迷信数字,比如带"4"的数字,认为和"死"谐音,就觉得不吉利. 虽然这些说法纯属无稽之谈,但有时还要迎合大众的需求.某抽奖活动的奖券号码 ...

  5. 【剑指Offer】剪绳子问题——四种解法

    剪绳子问题--四种解法 题目描述: 输入描述: 返回值描述: 示例1: 解题思路: 方法1:暴力递归 方法2:记忆化递归 方法三:动态规划 方法四,数学原理 题目描述: 给你一根长度为n的绳子,请把绳 ...

  6. 销售额超过公司均值的优秀经销商?SQL比例问题之分组比较的四种解法

    分组比较是看起来比较简单,但是写起来比较麻烦的问题,一般就是先进行两个不同分组计数.求和.求均值,然后两个均值作比较,这样就涉及表连接和判断,写的代码量就比其他问题多很多.它与连续问题.排名问题和累加 ...

  7. java二叉树转换为链表_leetcode刷题笔记-114. 二叉树展开为链表(java实现)

    leetcode刷题笔记-114. 二叉树展开为链表(java实现) 题目描述 给你二叉树的根结点 root ,请你将它展开为一个单链表: 展开后的单链表应该同样使用 TreeNode ,其中 rig ...

  8. C#LeetCode刷题之#263-丑数(Ugly Number)

    问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/3862 访问. 编写一个程序判断给定的数是否为丑数.丑数就是只包含 ...

  9. 【第03题】给定 a 和 b ,交换它们的值并输出 | 四种解法

    文章目录 零.写在前面 一.题目描述 二.解题思路 三.代码详解 1.正确解法1:引入临时变量 2.正确解法2:引入算术运算 3.正确解法3:引入异或运算 4.正确解法4:奇淫技巧 四.推荐专栏 五. ...

  10. 算法珠玑-变位词的四种解法

      给定一个英语词典,找出其中所有变位词集合.例如,"pots"."stops".和"tops"互为变位词,因为每一个单词都可以通过改变其他 ...

最新文章

  1. ajax php加载列表实例,jQuery+PHP+ajax实现加载更多内容列表
  2. 关于Ocelot 网关结合Consul实现服务转发的坑爹问题
  3. 荣耀Play3新版曝光:麒麟710A加持 其他配置不变
  4. Java序列化后isXXX变量没有了
  5. 《Python编程实战:运用设计模式、并发和程序库创建高质量程序》—— 2.7 代理模式...
  6. Dynamic Rankings(整体二分)
  7. Java函数、参数及传参方式详解
  8. 《CSS世界》(张鑫旭)pdf
  9. 计算机科学与技术总体培养目标,计算机科学与技术专业培养目标
  10. 6、Nacos服务注册——PushService类功能
  11. Whois接口查询文档
  12. matlab ptb安装,PTB之MATLAB编程:实验流程
  13. 【Android开发】Android基本UI组件
  14. 内网穿透,让自己的电脑当服务器
  15. 西域大都护府 第四期cfs靶场 渗透记录
  16. 如何使用百度baidu对某个特定网站进行站内搜索/检索
  17. ROS下如何将GPS数据在卫星地图显示(两种开源方法)
  18. 12pm 是中午12点 还是晚上12点 ??
  19. 美女在中国移动上厕所!
  20. k8s clientset 出现 Throttling request took 限流的解决方法

热门文章

  1. 传智播客 C/C++学习笔记 多级指针
  2. Atitit 提升语法级别4gl 4.5g 4.9g 5g 目录 1. 语言级别表 1 2. 4.9g实现细节 2 2.1. $dollor前导符 2 2.2. Static变量 2 2.3. S
  3. Atitit 签名规范 attilax总结 安全签名规范 v2 r99.docx
  4. 何波: 程序化交易系统构建与风险控制
  5. (转)星巴克其实是靠大数据盈利的!
  6. 2018第七届iWeb峰会城市巡回——杭州站
  7. ajax中sy,黑马eesy_15 Vue:vue语法和生命周期与ajax异步请求
  8. delphi 如何判断 socket 连接成功_Linux下的C++ socket编程实例
  9. 【路径规划】基于matlab粒子群和遗传算法求解机器人栅格地图避障路径规划问题【含Matlab源码 202期】
  10. 【优化分配】基于matlab粒子群算法求解火车票分配优化问题【含Matlab源码 1137期】