2021-04-11

  1. 丑数
    给你一个整数 n ,请你判断 n 是否为 丑数 。如果是,返回 true ;否则,返回 false 。

丑数 就是只包含质因数 2、3 和/或 5 的正整数。

示例 1:

输入:n = 6
输出:true
解释:6 = 2 × 3
示例 2:

输入:n = 8
输出:true
解释:8 = 2 × 2 × 2

思路:这个题比较简单,模拟就可以了

class Solution {
public:
    bool isUgly(int n) {
        if (n <= 0) {//如果这个数<=0,base case 输出false
            return false;
        }
        vector<int> factors = {2, 3, 5};//创建一个数组存放2,3,5
        for (int factor : factors) {
            while (n % factor == 0) {
                n /= factor;//丑数的话就是若干个2,3,5的乘积
            }//把这个数分别%2,3,5,如果%数为0;那么就用这个数除以2,3,5
        }
        return n == 1;//如果到最后这个数为1,那末这个数是丑数
       
    }
};
  1. 丑数 II
    给你一个整数 n ,请你找出并返回第 n 个 丑数 。

丑数 就是只包含质因数 2、3 和/或 5 的正整数。

思路:用三指针解决丑数问题

class Solution {
public:
      int nthUglyNumber(int n)
{
    vector<int>nums(2000,0);//存放目标数组
    nums[0]=1;//把第一个数存放进去
    int i2=0,i3=0,i5=0;//三个指针全部指向第一个数
    for(int i=1;i<=n;i++)
    {
        int ugly=min(nums[i2]*2,min(nums[i3]*3,nums[i5]*5));//找到最小的第二个数
        nums[i]=ugly;//给第二个数赋值
        if(nums[i]==nums[i2]*2)i2++;//指针移动到标记位置
        if(nums[i]==nums[i3]*3)i3++;
        if(nums[i]==nums[i5]*5)i5++;
    }
    return nums[n-1];//返回第n个数

}
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值