基础版本:

bool IsUglyNum(int64_t data)
{int64_t curData = data;while (curData % 2 == 0) curData /= 2;while (curData % 3 == 0) curData /= 3;while (curData % 5 == 0) curData /= 5;return 1 == curData ? true : false;
}

int64_t GetUglyNum(int destIdx)
{if (destIdx < 0) return -1;int64_t destData = 1;for (int curIdx = 0, curData = 1; curIdx != destIdx; ++curData){if (IsUglyNum(curData)){++curIdx;destData = curData;}}return destData;
}

高效版本:

int64_t MinOfThree(int64_t left, int64_t middle, int last)
{int finalData = left < middle ? left : middle;finalData = finalData < last ? finalData : last;return finalData;
}
int64_t GetUglyNum(int destIdx)
{if (destIdx < 0) return -1;int64_t* pTempData = new int64_t[destIdx];pTempData[0] = 1;int64_t* firstBiggerPMultiBy2 = pTempData;int64_t* firstBiggerMultiBy3 = pTempData;int64_t* firstBiggerMultiBy5 = pTempData;for (int curIdx = 1; curIdx != destIdx; ++curIdx){int64_t curMaxNum = pTempData[curIdx - 1];while (*firstBiggerPMultiBy2 * 2 <= curMaxNum) ++firstBiggerPMultiBy2;while (*firstBiggerMultiBy3 * 3 <= curMaxNum) ++firstBiggerMultiBy3;while (*firstBiggerMultiBy5 * 5 <= curMaxNum) ++firstBiggerMultiBy5;int64_t destNum = MinOfThree(*firstBiggerPMultiBy2 * 2, *firstBiggerMultiBy3 * 3, *firstBiggerMultiBy5 * 5);pTempData[curIdx] = destNum;}int destNum = pTempData[destIdx - 1];delete[] pTempData;return destNum;
}

34. 丑数(C++版本)相关推荐

  1. 【剑指offer-Java版】34丑数

    丑数:返回第N个丑数 只包含因子 2 3 5的数称为丑数,第一个丑数是 1 采用辅助数组的方法,提高时间效率 – 下一个丑数一定是已有的丑数乘以2 或者 3 或者 5 得到的 public class ...

  2. 剑指offer面试题[34]丑数

    题目描述        把只包含因子2.3和5的数称作丑数(Ugly Number).例如6.8都是丑数,但14不是,因为它包含因子7. 习惯上我们把1当做是第一个丑数.求按从小到大的顺序的第N个丑数 ...

  3. 洛谷P1246C语言,codevs1246 丑数

    题目描述 Description 对于一给定的素数集合 S = {p1, p2, ..., pK}, 来考虑那些质因数全部属于S 的数的集合.这个集合包括,p1, p1p2, p1p1, 和 p1p2 ...

  4. [剑指offer]面试题34:丑数

    面试题34:丑数 题目:我们把只包含因子2.3和5的数称作丑数(Ugly Number).求按从小到大的顺序的第1500个丑数.例如6.8都是丑数,但14不是,因为它包含因子7.习惯上我们把1当做第一 ...

  5. 剑指offer——面试题34:丑数

    剑指offer--面试题34:丑数 Solution1: 最容易想到的,也是最不可能AC的 class Solution {public:int GetUglyNumber_Solution(int ...

  6. [Jobdu] 题目1214:丑数

    题目描述: 把只包含因子2.3和5的数称作丑数(Ugly Number).例如6.8都是丑数,但14不是,因为它包含因子7. 习惯上我们把1当做是第一个丑数.求按从小到大的顺序的第N个丑数. 输入: ...

  7. 《剑指offer》-- 把数组排成最小的数、丑数、二进制中1的个数、表示数值的字符串、替换空格

    一.把数组排成最小的数: 1.题目: 输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个.例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为 ...

  8. 面试题之丑数的C++实现求解(孤陋寡闻了,才知道丑数这么high的东东)

    问题描述: 我们把只包含因子2.3和5的数称作丑数(Ugly Number).例如6.8都是丑数,但14不是,因为它包含因子7.习惯上我们把1当做是第一个丑数.求按从小到大的顺序的第1500个丑数.( ...

  9. 【IT笔试面试题整理】丑数

    [试题描述]我们把只包含因子2.3和5的数称作丑数.求按从到大的顺序的第1500个丑数.例如6,8是丑数,而14不是,因为它包含因子7.习惯上把1当作第一个丑数. 根据丑数的定义,丑数应该是另一个丑数 ...

  10. usaco ★Humble Numbers 丑数

    ★Humble Numbers 丑数 对于一给定的素数集合 S = {p1, p2, ..., pK}, 来考虑那些质因数全部属于 S 的数的集合.这个集合包括,p1, p1p2, p1p1, 和 p ...

最新文章

  1. 一个简单的Java web服务器实现
  2. Android 三角形控件
  3. Linux 主要的发行系统版本介绍
  4. DotText源码学习——从配置文件Web.config入手(一)
  5. 无法启动程序因为计算机中丢失dev,DevUseAnalyzerTask.dll
  6. 如何自定义安装mysql_安装MySQL
  7. 计算机怎样更新卡驱动,显卡驱动怎么升级
  8. 多开助手完美版,APP一键多开,支持安卓10
  9. Jquery Mobile dialog的生命周期 - 落叶潇潇雨 - 博客园
  10. Linux机械硬盘初始化,教你如何初始化外接盒中的硬盘
  11. E4A(易安卓)学习——第一个APP
  12. 【导数术】12.极值点偏移与拐点偏移
  13. 188968-51-6,cilengitide,西仑吉肽,选择性的αvβ3 和αvβ5受体整合素抑制剂
  14. Fidder使用工具介绍-1
  15. 第二章 信息系统服务管理
  16. 浙大计算机复试上机成绩,浙大计算机研究生复试上机考试-2006年
  17. 问财爬虫Python第三方包,仅供学习使用
  18. 南京邮电大学计算机非全调剂,南京邮电大学2018年拟接收(非全日制)考研调剂公告...
  19. vue整合视频流教程
  20. 51NOD - 1305 Pairwise Sum and Divide(思维)

热门文章

  1. mongodb 高可用分布式原理 ---------搭建高可用mongo集群前需要温习的知识-火
  2. 大整数乘法——分治算法的时间复杂度
  3. linux文件系统简析
  4. ssh client 报 algorithm negotiation failed的解决方法
  5. redis事物的使用
  6. AutoCAD VBA创建椭圆和样条曲线
  7. 36.软件安装:RPM,SRPM和YUM功能
  8. 17. shell 脚本
  9. 9. grouped product
  10. oracle错误输出,oracle – SQL小提琴输出错误