Java编程题目-13:Ugly Number
2016-09-22 23:55
459 查看
首先是题目要求:
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 that 1 is typically treated as an ugly number.
大概意思就是:把只包含质因子2、3和5的数称作丑数(Ugly Number),给我们一个数,写个方法判断下它是不是丑数。
原题链接:请戳这里
下面是我的代码实现:
上面是我最开始的思路,现在看来很混乱啊,什么乱七八糟的想法,还很麻烦。
下面是过了半天又想到了新的思路:
这个思路就简单清晰了许多,用那个数直接2、3、5轮着除,最后还是除不尽那就必然不是丑数。因为丑数因式分解后因子只能有2、3、5,所以才能这个判断。
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 that 1 is typically treated as an ugly number.
大概意思就是:把只包含质因子2、3和5的数称作丑数(Ugly Number),给我们一个数,写个方法判断下它是不是丑数。
原题链接:请戳这里
下面是我的代码实现:
public class Solution { public boolean isUgly(int num) { if(num==1) return true; //题目里说了1作为特色丑数 if(num<=0) return false; //丑数都是非负的 if(num==7) return false; int i = 2; ArrayList<Integer> list = new ArrayList<Integer>(); int res = 0; while(res==0){ res = num%i; if(res!=0) i++; num = num/i; list.add(i); if(num==1) break; } for (Integer integer : list) { if(integer!=2 && integer!=3 && integer!=5) return false; } return true; } }
上面是我最开始的思路,现在看来很混乱啊,什么乱七八糟的想法,还很麻烦。
下面是过了半天又想到了新的思路:
public class Solution { public boolean isUgly(int num) { if(num==1) return true; if(num<=0) return false; while(num>1){ if(num%2==0){ num = num/2; }else if(num%3==0){ num = num/3; }else if(num%5==0){ num = num/5; }else{ return false; } } return true; } }
这个思路就简单清晰了许多,用那个数直接2、3、5轮着除,最后还是除不尽那就必然不是丑数。因为丑数因式分解后因子只能有2、3、5,所以才能这个判断。
前期练习阶段先不考虑代码优化,只要能实现功能,先写出来,以后再慢慢改善。
相关文章推荐
- 五十道编程小题目 --- 13 java
- java编程笔记13 过滤文件
- (13)Java网络编程
- 【java编程】IO流和集合类综合题目
- AdaultBird--我的黑马程序员之路!Chapter13---java编程基础!
- Java并发编程-13-在集合点的同步-CyclicBarrier
- 急求解答:JAVA编程与SQL题目!!!!!!!!!!!!!!!
- java基础编程思想题目
- 13.JAVA之GUI编程将程序打包jar
- 几道有意思的java编程题目
- 网易2016年Java工程师实习编程题目
- Java网络编程从入门到精通(13):使用Socket类接收和发送数据
- 校招季——编程题目(12-13)
- 某网站的编程挑战题目 Java版本的 strToInt
- Java笔试常见编程题目:判断101-200 之间有多少个素数,并输出所有素数
- Java网络编程(13):使用Socket类接收和发送数据
- 黑马程序员_java基础13网络编程 TCP和DNS
- 2014微软编程一小时 题目1 : Arithmetic Expression Java实现
- Java学习13--TCP网络编程
- 网易2016年Java工程师实习编程题目之括号匹配的验证