码迷,mamicode.com
首页 > 其他好文 > 详细

《剑指offer》丑数

时间:2015-09-12 10:56:30      阅读:141      评论:0      收藏:0      [点我收藏+]

标签:剑指offer   牛客网   

【 声明:版权所有,转载请标明出处,请勿用于商业用途。  联系信箱:libin493073668@sina.com】


题目链接:http://www.nowcoder.com/practice/6aa9e04fc3794f68acf8778237ba065b?rp=2&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking


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

思路
我们可以使用最直观的连除因子法来得到结果,但是这在时间效率上并不理想,但好处是没有额外的空间消耗
我们也可以使用空间换时间的做法,我们开一个数组来有序的保存所有的丑数,因为我们的前提是保证了这个数组的有序性,所以我们可以通过三个指针来循环计算


class Solution
{
	public:
		int GetUglyNumber_Solution(int n)
		{
			if(n<=0)
				return 0;
			int *uglyNum = new int[n];
			uglyNum[0] = 1;
			int *ugly2 = uglyNum;
			int *ugly3 = uglyNum;
			int *ugly5 = uglyNum;
			int cnt = 1;
			while(cnt<n)
			{
				int _min = min(*ugly2*2,min(*ugly3*3,*ugly5*5));
				uglyNum[cnt] = _min;
				while(*ugly2*2<=uglyNum[cnt])
					++ugly2;
				while(*ugly3*3<=uglyNum[cnt])
					++ugly3;
				while(*ugly5*5<=uglyNum[cnt])
					++ugly5;
				++cnt;
			}
			int ans = uglyNum[cnt-1];
			delete []uglyNum;
			return ans;
		}
};


版权声明:本文为博主原创文章,如果转载,请注明出处

《剑指offer》丑数

标签:剑指offer   牛客网   

原文地址:http://blog.csdn.net/libin1105/article/details/48391795

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!