面试OR笔试19——丑数

xiaoxiao2021-02-28  125

题目及要求

1.1 题目描述

只包含因子2、3和5的数称为丑数(Ugly Number),习惯上我们把1当做第一个丑数。求按从小到大顺序的第n(n > 0)个丑数。

 

2 解答

2.1 代码

bool isUgly(int n){ while(!(n%2)) n /= 2; while(!(n%3)) n /= 3; while(!(n%5)) n /= 5; return n==1; } // 方案1 int getUglyNumber1(int index){ if(index < 1) return 0; int n(0); while(index){ ++n; if(isUgly(n)) --index; } return n; } // 方案2, 需要额外空间,时间效率较高 int getUglyNumber2(int index){ if(index < 1) return 0; int *pn = new int[index]; pn[0] = 1; for(int k1(1),k2(0),k3(0),k5(0);k1<index;++k1){ pn[k1] = min(2*pn[k2], min(3*pn[k3], 5*pn[k5])); while(2*pn[k2]<=pn[k1]) ++k2; while(3*pn[k3]<=pn[k1]) ++k3; while(5*pn[k5]<=pn[k1]) ++k5; } index = pn[index-1]; delete[] pn; return index; }
转载请注明原文地址: https://www.6miu.com/read-42049.html

最新回复(0)