本文最后更新于:2025年10月27日 下午
                  
                
              
            
            
              
                
                思路
模拟题,根据题目条件写判断即可
C++代码
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 
 | class Solution {public:
 bool isUgly(int n) {
 if(n<=0)    return false;
 while(n%2==0)   n/=2;
 while(n%3==0)   n/=3;
 while(n%5==0)   n/=5;
 if(n==1)    return true;
 else
 return false;
 }
 };
 
 | 
思路
这里要求第n个丑数,对于效率的要求就更高了,但是思路依然是比较清晰,就是在数组里面把2,3,5从小到大的数用集合存起来,然后根据性质还有升序的规则一个一个的算出来即可(三路归并)但是这三路里面是有重合的,所以在写的时候还要考虑一下去重的问题,最后得到的这个总的集合就是所有只包含2,3,5为质因子
C++代码
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 
 | class Solution {public:
 typedef long long ll;
 int getUglyNumber(int n) {
 if(n<2)    return n;
 vector<int> f(1,1);
 int i=0,j=0,k=0;
 ll t=0;
 while(--n)
 {
 t=min(f[i]*2, min(f[j]*3,  f[k]*5));
 if(t==f[i]*2)   i++;
 if(t==f[j]*3)   j++;
 if(t==f[k]*5)   k++;
 f.push_back(t);
 }
 return f.back();
 }
 };
 
 |