最笨的办法,没有任何技术含量。。。。
丑数
http://www.nowcoder.com/questionTerminal/6aa9e04fc3794f68acf8778237ba065b
题目描述:把只包含质因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含质因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。
适用与拿到这道题没有任何思路的朋友,大佬轻喷😅
一个丑数肯定会被分解成为 2×m*3*n*5*l的形式,所以新的丑数都是通过一个现有的丑数×2、×3 或者×5得到的,题目的意思是找第n个满足条件的丑数。
如果通过1 与 {2,3,5} 相乘,再用得到的乘积继续与{2,3,5}相乘, 直接生成n多个丑数,放到数组里面,然后 返回下标为index - 1的丑数就是答案。
class Solution {
public:
//用于去重
void func(vector<int>& v)
{
sort(v.begin(),v.end());
auto it = unique(v.begin(),v.end());
v.erase(it,v.end());
}
int GetUglyNumber_Solution(int index) {
int nums[3] = {2,3,5};
vector<int> res = {1};
int max = 0;
for(int i = 0; i < index; i++)
{
//每次生成新3个新的丑数,可能会与之前的重复,所以要进行去重。
for(int j = 0; j < 3; j++)
{
res.push_back(nums[j] * res[i]);
}
func(res);
}
//因为可能会出现超出int范围,所以需要把超出范围的负数排除
auto it = res.begin();
while(*it < 0)
{
it ++;
}
res.erase(res.begin(),it);
return res[index - 1];
}
}; 

