算法小题之丑数

问题描述

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

分析

从1开始往上找,遇到合适的第n个即是答案.但是这样效率很低. 其实第i个丑数是可以由前i-1个推导出来的.因此有了O(n^2)的解决方案

代码

 int GetUglyNumber_Solution(int index) {
    	vector<int> u={1,2,3,4,5};
        for(int i = 5; i <index ;  i++  ){
           int minv= INT_MAX;   
           int j =0;
           while(2*u[j] <= u[i-1])j++;
           minv = minv >2*u[j]?2*u[j]: minv;  
           j =0 ;
           while(3*u[j] <= u[i-1])j++;
           minv = minv >3*u[j]?3*u[j]: minv;
           j =0 ;
           while(5*u[j] <= u[i-1])j++;
           minv = minv >5*u[j]?5*u[j]: minv;
           u.push_back(minv);
        }
        return u[index-1];
    }
posted @ 2017-07-28 12:10  bzt007  阅读(121)  评论(0编辑  收藏  举报