编写程序找第 n 个丑数。
丑数就是只包含质因子 2, 3, 5 的正整数。
例如, 1, 2, 3, 4, 5, 6, 8, 9, 10, 12 就是前10个丑数。
注意:
1. 1 一般也被当做丑数
2. n不超过1690
详见:https://leetcode.com/problems/ugly-number-ii/description/
Java实现:
class Solution { public int nthUglyNumber(int n) { if(n<=1){ return n; } int[] res=new int[n]; res[0]=1; int i2=0,i3=0,i5=0; for(int i=1;i<n;++i){ res[i]=Math.min(res[i2]*2,Math.min(res[i3]*3,res[i5]*5)); if(res[i]==res[i2]*2){ ++i2; } if(res[i]==res[i3]*3){ ++i3; } if(res[i]==res[i5]*5){ ++i5; } } return res[n-1]; } }
C++实现:
class Solution { public: int nthUglyNumber(int n) { if(n<=1) { return n; } vector<int> res(n); res[0]=1; int i2=0,i3=0,i5=0; for(int i=1;i<n;++i) { res[i]=min(min(res[i2]*2,res[i3]*3),res[i5]*5); if(res[i]==res[i2]*2) { ++i2; } if(res[i]==res[i3]*3) { ++i3; } if(res[i]==res[i5]*5) { ++i5; } } return res[n-1]; } };