丑数

寻找丑数及关于程序优化效率的一点说明

风格不统一 提交于 2019-12-07 00:06:33
一、问题描述 如果一个整数值含有因数2,3,5(包括1和该整数本身)的整数称为丑数(Ugly Number)。换句话说丑数ugly_number是可以表示成形如下面表达式的形式,表达式中的i,j,k均是大于等于0的整数。 举个例子,18 = 2 * 3 * 3,所以18是一个丑数。而14 = 2 * 7,所以14不是一个丑数。 现在有个需求就是要找到第2013个丑数。 二、问题分析 解决问题的思路显然是要根据丑数的性质。主要有两种思考的切入点。 第一种方法,按照整数正好三顺序一个一个找,并判断该整数是不是丑数,如果是丑数的个数加1,如果不是继续查找下一个,直到找到问题要求的第N个丑数即可,这种方法的效率不是很好,但是很好理解,所以在这里只给出伪代码。伪代码如下: while(i < N) if(true == judge_ugly_number(number)) i++; ugly_numbers[i] = number; number++; else number++; 判断一个数是否是丑数的伪代码如下: while(0 == number % 2) number /= 2; while(0 == number % 3) number /= 3; while(0 == number % 5) number /= 5; if(1 == number) reutrn true;

LeetCode:Ugly Number II

冷暖自知 提交于 2019-12-06 09:18:45
1、题目名称 Ugly Number II(丑数2:找出第n个丑数) 2、题目地址 https://leetcode.com/problems/ugly-number-ii/ 3、题目内容 英文:Write a program to find the n -th ugly number. 中文:写程序找出第n个丑数 说明:丑数具有如下特征:1是丑数,丑数可以表示为有限个2、3、5的乘积 注意:关于“判断指定数字是否为丑数”,请参考 Ugly Number(LeetCode #263) 5、一个TLE的方法 一个最容易想到的方法,就是从1开始依次向后判断各自然数是否为丑数,一直判断到第n个丑数,返回第n个丑数的值。这种方法由于充斥了大量的重复计算,效率很低,因此会导致TLE(Time Limit Exceeded)的结果。 Java代码如下: /** * 功能说明:LeetCode 263 - Ugly Number * 开发人员:Tsybius2014 * 开发时间:2015年8月23日 */ public class Solution { /** * 求第N个丑数 * @param n * @return 第N个丑数 */ public int nthUglyNumber(int n) { if (n <= 1) { return 1; } int counter = 0;

LeetCode:Ugly Number

不想你离开。 提交于 2019-12-06 09:18:31
1、题目名称 Ugly Number(丑数1:判断指定数字是否为丑数) 2、题目地址 https://leetcode.com/problems/ugly-number 3、题目内容 英文:Write a program to check whether a given number is an ugly number. 中文:写程序判断指定数字是否为丑数 说明:丑数具有如下特征:1是丑数,丑数可以表示为有限个2、3、5的乘积 注意:本题的目标不是“判断第N个丑数”,关于“判断第N个丑数”,请参考 Ugly Number II(LeetCode #264) 4、解题方法 根据丑数的定义,可以通过如下方法判断一个数字n是否为丑数:可以试着用2、3、5不断整除n,当n不能再被2、3、5整除时,判断n是否等于1,等于1则指定的数字是丑数(返回真),否则不是(返回假)。 Java代码如下: /** * 功能说明:LeetCode 263 - Ugly Number * 开发人员:Tsybius2014 * 开发时间:2015年8月23日 */ public class Solution { /** * 判断数字是否为丑数 * @param num 被判断数字 * @return true:丑数,false:非丑数 */ public boolean isUgly(int num) { if