《剑指offer》丑数

来源:互联网 发布:扬尼斯-阿德托昆博数据 编辑:程序博客网 时间:2024/05/23 19:18

【 声明:版权所有,转载请标明出处,请勿用于商业用途。  联系信箱: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;}};


0 0
原创粉丝点击