LeetCode---Ugly Number II
2015-12-02 13:14
399 查看
题目大意:给出一个数n,求出第n个丑数。所谓丑数是指只能被2,3,5整除的数。1是第一个丑数。
算法思想:
1.利用一个数组存储现有的丑数使其有序排列。
2.然后将数组中的每一个数分别乘以2,3,5得到一批新的丑数,将其已经存在数组中的丑数排除。找出最小的那个数即是数组中的下一个数。
3.为了简化步骤2,可知数组存在一个数使得在它前面的数乘以2小于等于当前最大的丑数,使得它后面的数乘以2都大于当前最大的丑数,记录这个数为T2,同理可得T3和T5.
4.数组中下一个丑数即为min(T2*2,T3*3,T5*5).
代码如下:
算法思想:
1.利用一个数组存储现有的丑数使其有序排列。
2.然后将数组中的每一个数分别乘以2,3,5得到一批新的丑数,将其已经存在数组中的丑数排除。找出最小的那个数即是数组中的下一个数。
3.为了简化步骤2,可知数组存在一个数使得在它前面的数乘以2小于等于当前最大的丑数,使得它后面的数乘以2都大于当前最大的丑数,记录这个数为T2,同理可得T3和T5.
4.数组中下一个丑数即为min(T2*2,T3*3,T5*5).
代码如下:
class Solution { public: int nthUglyNumber(int n) { if (n<=0) return 0; int* uglyNumbers= new int ; int* mulity2 = uglyNumbers; int* mulity3 = uglyNumbers; int* mulity5 = uglyNumbers; uglyNumbers[0] = 1; int nextIndex = 1; while (nextIndex<n){ uglyNumbers[nextIndex] = minNum(*mulity2*2,*mulity3*3,*mulity5*5); while (*mulity2 * 2 <= uglyNumbers[nextIndex]){ ++mulity2; } while (*mulity3 * 3 <= uglyNumbers[nextIndex]){ ++mulity3; } while (*mulity5 * 5 <= uglyNumbers[nextIndex]){ ++mulity5; } ++nextIndex; } int ugly = uglyNumbers[nextIndex-1]; delete[] uglyNumbers; return ugly; } int minNum(int a,int b,int c){ int temp = a < b ? a : b; return temp < c ? temp : c; } };
相关文章推荐
- NSNumber和Int的互相转换
- 使用Myeclipse内置Ant编译项目时提醒警告java\lang\Object.class(java\lang:Object.class): 主版本 51 比 50 新,此编译器支持最新的主版本
- centos编译telepresence测试效果
- 百钱买百鸡
- android--RecycleView.Adapter的初体验
- 人工智能(AI)资料大全
- LintCode: Flatten Binary Tree to Linked List
- win7下,vs2013+qt5.3+qwt6.1.2安装配置
- android透明状态栏
- Java开发环境
- NYOJ 463 九九乘法表
- 一个美国人到中国当产品经理的心得:中国App设计真好!
- Activiti学习笔记目录
- Codeforces Round #334 (Div. 2)-More Cowbell(贪心模拟)
- 【FastDev4Android框架开发】HorizontalScrollView,Fragment,FragmentStatePagerAdapter打造网易新闻Tab及滑动页面效果(三十六)
- jQuery基础
- 离线安装谷歌扩展
- linux编辑网卡信息
- Web前端设计:Ajax+JQuery+Json
- Python基础——版本的查询