- 丑数
给你一个整数 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,那末这个数是丑数
}
};
- 丑数 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个数
}
};