34. 丑数(C++版本)
基础版本:
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++版本)相关推荐
- 【剑指offer-Java版】34丑数
丑数:返回第N个丑数 只包含因子 2 3 5的数称为丑数,第一个丑数是 1 采用辅助数组的方法,提高时间效率 – 下一个丑数一定是已有的丑数乘以2 或者 3 或者 5 得到的 public class ...
- 剑指offer面试题[34]丑数
题目描述 把只包含因子2.3和5的数称作丑数(Ugly Number).例如6.8都是丑数,但14不是,因为它包含因子7. 习惯上我们把1当做是第一个丑数.求按从小到大的顺序的第N个丑数 ...
- 洛谷P1246C语言,codevs1246 丑数
题目描述 Description 对于一给定的素数集合 S = {p1, p2, ..., pK}, 来考虑那些质因数全部属于S 的数的集合.这个集合包括,p1, p1p2, p1p1, 和 p1p2 ...
- [剑指offer]面试题34:丑数
面试题34:丑数 题目:我们把只包含因子2.3和5的数称作丑数(Ugly Number).求按从小到大的顺序的第1500个丑数.例如6.8都是丑数,但14不是,因为它包含因子7.习惯上我们把1当做第一 ...
- 剑指offer——面试题34:丑数
剑指offer--面试题34:丑数 Solution1: 最容易想到的,也是最不可能AC的 class Solution {public:int GetUglyNumber_Solution(int ...
- [Jobdu] 题目1214:丑数
题目描述: 把只包含因子2.3和5的数称作丑数(Ugly Number).例如6.8都是丑数,但14不是,因为它包含因子7. 习惯上我们把1当做是第一个丑数.求按从小到大的顺序的第N个丑数. 输入: ...
- 《剑指offer》-- 把数组排成最小的数、丑数、二进制中1的个数、表示数值的字符串、替换空格
一.把数组排成最小的数: 1.题目: 输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个.例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为 ...
- 面试题之丑数的C++实现求解(孤陋寡闻了,才知道丑数这么high的东东)
问题描述: 我们把只包含因子2.3和5的数称作丑数(Ugly Number).例如6.8都是丑数,但14不是,因为它包含因子7.习惯上我们把1当做是第一个丑数.求按从小到大的顺序的第1500个丑数.( ...
- 【IT笔试面试题整理】丑数
[试题描述]我们把只包含因子2.3和5的数称作丑数.求按从到大的顺序的第1500个丑数.例如6,8是丑数,而14不是,因为它包含因子7.习惯上把1当作第一个丑数. 根据丑数的定义,丑数应该是另一个丑数 ...
- usaco ★Humble Numbers 丑数
★Humble Numbers 丑数 对于一给定的素数集合 S = {p1, p2, ..., pK}, 来考虑那些质因数全部属于 S 的数的集合.这个集合包括,p1, p1p2, p1p1, 和 p ...
最新文章
- 一个简单的Java web服务器实现
- Android 三角形控件
- Linux 主要的发行系统版本介绍
- DotText源码学习——从配置文件Web.config入手(一)
- 无法启动程序因为计算机中丢失dev,DevUseAnalyzerTask.dll
- 如何自定义安装mysql_安装MySQL
- 计算机怎样更新卡驱动,显卡驱动怎么升级
- 多开助手完美版,APP一键多开,支持安卓10
- Jquery Mobile dialog的生命周期 - 落叶潇潇雨 - 博客园
- Linux机械硬盘初始化,教你如何初始化外接盒中的硬盘
- E4A(易安卓)学习——第一个APP
- 【导数术】12.极值点偏移与拐点偏移
- 188968-51-6,cilengitide,西仑吉肽,选择性的αvβ3 和αvβ5受体整合素抑制剂
- Fidder使用工具介绍-1
- 第二章 信息系统服务管理
- 浙大计算机复试上机成绩,浙大计算机研究生复试上机考试-2006年
- 问财爬虫Python第三方包,仅供学习使用
- 南京邮电大学计算机非全调剂,南京邮电大学2018年拟接收(非全日制)考研调剂公告...
- vue整合视频流教程
- 51NOD - 1305 Pairwise Sum and Divide(思维)